ruby / rails NoMethodError?使用自定义验证方法时

时间:2010-01-17 06:58:23

标签: ruby-on-rails ruby validation activerecord

我是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 个答案:

答案 0 :(得分:8)

您应该将验证方法作为符号传递:

validates_presence_of :description, :if => :require_description_presence?

答案 1 :(得分:0)

你可以让它更短更甜。 :if子句将轻松获取属性。因此,如果can_send_email是Person的布尔属性,那么这将起作用:

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

不需要创建另一种方法来检查此属性。如果您在can_send_email的末尾注意到额外的问号,那是因为Rails允许您使用布尔属性执行此操作。我喜欢它,因为它使代码的目的更加清晰。