Dmy*_*iak 9 ruby validation activerecord ruby-on-rails
我需要执行验证以确保公司内只有一个用户可以存在于给定类别中.
validates :user_id, :uniqueness => {:scope => [:category, :company_id], :message => "already exists"}
Run Code Online (Sandbox Code Playgroud)
除了在:user_id密钥上设置错误消息之外,这个工作正常.
我怎么能这样做但是在:user键上设置错误(validates :user给出错误)?
这是检查唯一性并强制将错误分配给:user属性的简单方法:
class User < ActiveRecord::Base
validate :user_unique_per_company_per_category
private
def user_unique_per_company_per_category
if self.class.exists?(:user_id => user_id, :company_id => company_id, :category => category)
errors.add :user, 'already exists'
end
end
end
Run Code Online (Sandbox Code Playgroud)
我认为,如果你能想出一种使用默认验证的方法,那将是更好的选择,:user_id但也许你有一个特殊的用例.
此外,如果您没有在表单中使用它,您可以考虑将错误分配给:base,因为您可能会混淆期望错误出现的未来开发人员:user_id:
errors.add :base, 'already exists'
Run Code Online (Sandbox Code Playgroud)