尝试使用add_to_base添加错误消息时,我收到一个未定义的方法'errors'消息。我在我的模型中定义它。我是否应该包含任何其他文件以访问errors变量。
模型文件 - 我在方法
中定义它self.errors.add_to_base("Invalid Name")
错误消息
undefined method `errors' for #<Class:0x0000010179d7a0>
我尝试将其称为errors.add_to_base("Invalid Name")
,但仍然遇到同样的错误。
感谢。
答案 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