2010-10-01 4 views
0

Я пытаюсь сделать validates_length_of, но указав диапазон/минимум/максимум во время выполнения.dynamic 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 

Так что я хотел бы сделать в классе ребенок:

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

Использование функции лямбда может работать:

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

хорошо, в принципе можно указать только min_length (а не max_length), поэтому вы не должны проверить максимальную длину, и наоборот ... – jordinl