2010-01-17 2 views
4

I'v été nouvelle à ruby ​​et rails et a rencontré une erreur assez étrange:ruby ​​/ rails NoMethodError? lorsque vous utilisez la méthode de validation personnalisée

class Person < ActiveRecord::Base 
    validates_presence_of :description, :if => require_description_presence? 

    def require_description_presence? 
     self.can_send_email 
    end 
end 

soulève

NoMethodError in PeopleController#index 

undefined method `require_description_presence?' for #<Class:0x4c4fadc> 

Répondre

8

Vous devez passer la méthode de validation comme symbole:

validates_presence_of :description, :if => :require_description_presence? 
0

Vous pouvez rendre cela encore plus court et plus doux. La clause :if prendra tout aussi facilement un attribut. Donc, si can_send_email est un attribut booléen de la personne, cela fonctionne:

class Person < ActiveRecord::Base 
    validates_presence_of :description, :if => :can_send_email? 
end 

Pas besoin de créer une autre méthode juste pour vérifier cet attribut. Et si vous remarquez le point d'interrogation supplémentaire à la fin de can_send_email, c'est parce que Rails vous permet de le faire avec des attributs booléens. Je l'aime parce que cela rend le but du code plus clair.

Questions connexes