Rails验证错误

时间:2010-06-28 06:44:07

标签: ruby-on-rails ruby exception-handling

尝试使用add_to_base添加错误消息时,我收到一个未定义的方法'errors'消息。我在我的模型中定义它。我是否应该包含任何其他文件以访问errors变量。

模型文件 - 我在方法

中定义它
self.errors.add_to_base("Invalid Name")

错误消息

undefined method `errors' for #<Class:0x0000010179d7a0>

我尝试将其称为errors.add_to_base("Invalid Name"),但仍然遇到同样的错误。

感谢。

4 个答案:

答案 0 :(得分:4)

你应该在你的回调方法中调用它,如下面的

  def validate
    if !self.interests.blank? && !self.interests.match("<").nil?
        self.errors.add :base, 'Please ensure that Interest field do not contain HTML(< and >) tags'
    end
  end

答案 1 :(得分:1)

我怀疑您已将方法定义为类方法,而不是实例方法。

类方法在ruby上看起来像这样:

def self.checkFoo()
  ...
end

实例方法如下所示:

def checkFoo()
  ...
end

检查你的checkFoo方法是一个实例方法,然后像这样使用它:

class MyModel < ActiveRecord::Base
  validate :foo

  private
  def checkFoo()
    self.errors.add etc..
  end
end

答案 2 :(得分:0)

通常使用验证回调,模型错误既用于导致预期数据库保存失败,也为最终用户设置上下文错误消息。 add_to_base变体适用于一般的非特定错误条件(即与特定模型属性无关)。

class MyModel < ActiveRecord::Base
  validate do |my_model|
    if my_model.some_attribute.blank? # For example
      my_model.errors.add :my_model, "must be filled in"
    end
  end
end

随后

@my_model = MyModel.create(:some_attribute => "")

会失败,@ my_model.errors.full_messages数组会包含

[ ..., "Some_attribute must be filled in", ... ]

上面的例子有一个简写如下

class MyModel < ActiveRecord::Base
  validates_presence_of :some_attribute, :msg => "must be filled in"
end

答案 3 :(得分:0)

看起来你的'self.errors.add_to_base(“无效名称”)'没有任何问题

但是你的模型应该继承自ActiveRecord :: Base

欢呼声

sameera