1

我需要进行自定义验证,检查正在更新的属性是否小于该记录上的另一个属性。我试过这样做:

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_savewhich is just before it commit 但也没有运气。

4

1 回答 1

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'}
于 2013-09-18T20:32:24.087 回答