我需要进行自定义验证,以检查正在更新的属性是否小于该记录上的另一个属性。我试过这样做:
validates :team_size, :numericality => { :greater_than_or_equal_to => self.users.count }
但它带来了错误:
NoMethodError (undefined method `users' for #<Class:0x007fcda9a548e8>):
我也试过用这样的方法做一个before_save
钩子:
def validate_team_size
if self.team_size < self.users.count
errors[:base] << "Custom message."
end
end
但它只是忽略它 - 我假设因为team_size
属性尚未更新所以我正在检查旧值。也尝试使用after_save
,它就在它提交之前,但也没有运气。
答案 0 :(得分:2)
你所拥有的是亲密的。试试这样的事情..
validate :team_size_less_than_users_count
def team_size_less_than_users_count
if team_size < users.count
errors[:base] << "Custom message."
end
end
要访问实例变量,你可以这样做......
validates_numericality_of :team_size, :greater_than_or_equal_to => Proc.new {|c| c.users.count }, :message => 'Custom message'
此语法也适用
validates :team_size, :numericality => { :greater_than_or_equal_to => Proc.new {|c| c.users.count }, :message => 'Custom message'}