2010-10-01 6 views
0

J'essaie de faire un validates_length_of, mais en spécifiant la plage/minimum/maximum à l'exécution.dynamic validates_length_of

Par exemple, nous avons un modèle de parent:

class Parent < ActiveRecord::Base 
    has_many :children 

    # with attributes min_length, max_length 
end 

Et un modèle enfant:

class Child < ActiveRecord::Base 
    belongs_to :parent 

    # with an attribute reference 
end 

Donc ce que je voudrais faire dans la classe des enfants est:

validate :reference_length 

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

Mais cela ne fonctionne pas, y at-il un moyen de le faire sans faire errors.add(:reference, message) if...?

Répondre

1

En utilisant une fonction lambda peut fonctionner:

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

bien, au fond vous pouvez spécifier que min_length (et non max_length) vous ne devriez pas valider la longueur maximale, et vice-versa ... – jordinl