Rails使用属性验证模型

时间:2013-09-18 19:49:49

标签: ruby-on-rails activerecord

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

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,它就在它提交之前,但也没有运气。

1 个答案:

答案 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'}