validates_length_of带有变量

时间:2014-10-19 12:11:47

标签: ruby-on-rails ruby activerecord

我有一个ActiveRecord模型:

class Message < ActiveRecord::Base

有2个属性:content(字符串)和max_content_length(整数) 两者都是动态的并由用户设定 我正在尝试使用content整数来验证max_content_length字符串的长度,如下所示:

validates_length_of :content, maximum: self.max_content_length

或者像这样:

validates_length_of :content, maximum: lambda{ self.max_content_length }

但validates_length_of会抛出“找不到方法”或“最大必须是非负整数或无穷大”异常(分别)。

有没有其他方法可以“注册”max_content_length函数作为长度的验证器?

谢谢!

(我知道这个问题可能是this questionthis one的重复,但不幸的是,那里的答案有点偏离主题并且令人困惑)

1 个答案:

答案 0 :(得分:2)

进行自己的验证:

class Message < ActiveRecord::Base

  validate :validate_content_length

  private

  def validate_content_length
    if content.length > max_content_length
      errors.add :content, "too long (must be #{max_content_length} characters or less)"
    end
  end

end

此处的帮助指南http://guides.rubyonrails.org/active_record_validations.html#performing-custom-validations