Я не думаю, что это возможно, поскольку метод validates ActiveRecord отправляет ошибки проверяемому методу.
Итак, validates: пользователь пытается отправить в attr_accessor:пользователь, которого нет в вашей модели.
Хотя, если вы просто пытаетесь сделать сообщение об ошибке довольно красивым, вы можете:
alias user user_id
А затем использовать: user в вашей проверке.
validates :user, :uniqueness => {:scope => [:category, :company_id], :message => "already exists"}
С другой стороны, я бы не использовал user в псевдониме, а что-то вроде:
alias the_supplied_user user_id
А затем в вашей проверке:
validates :the_supplied_user, :uniqueness => {:scope => [:category, :company_id], :message => "already exists"}