动态validates_length_of

时间:2010-10-01 14:38:27

标签: ruby-on-rails ruby

我尝试执行validates_length_of,但在运行时指定范围/最小值/最大值。

例如,我们有一个父模型:

class Parent < ActiveRecord::Base
  has_many :children

  # with attributes min_length, max_length
end

还有一个孩子模特:

class Child < ActiveRecord::Base
  belongs_to :parent

  # with an attribute reference
end

所以我想在Child课程中做的是:

validate :reference_length

def reference_length
  options = { :within => parent.min_length..parent.max_length }
  self.class.validates_length_of :reference, options
end

但它没有用,有没有办法在不做errors.add(:reference, message) if...的情况下做到这一点?

1 个答案:

答案 0 :(得分:1)

使用lambda函数可能有效:

validates_length_of :reference, :minimum => lambda{parent.min_length},
                                :maximum => lambda{parent.max_length}