ruby / rails NoMethodError? при использовании пользовательского метода проверки - PullRequest
4 голосов
/ 17 января 2010

Я был новичком в ruby ​​и rails и обнаружил довольно странную ошибку:

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

    def require_description_presence?
        self.can_send_email
    end
end

поднимает

NoMethodError in PeopleController#index

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

Ответы [ 2 ]

8 голосов
/ 17 января 2010

Вы должны передать метод проверки как символ:

validates_presence_of :description, :if => :require_description_presence?
0 голосов
/ 17 января 2010

Вы можете сделать это еще короче и слаще. Предложение :if примет атрибут так же легко. Так что, если can_send_email является логическим атрибутом Person, это будет работать:

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

Нет необходимости создавать другой метод только для проверки этого атрибута. И если вы заметили дополнительный знак вопроса в конце can_send_email, это потому, что Rails позволяет вам делать это с логическими атрибутами. Мне это нравится, потому что это делает цель кода более понятной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...