【问题标题】:Rails Validation ErrorRails 验证错误
【发布时间】:2010-06-28 06:44:06
【问题描述】:

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

模型文件 - 我在方法中定义它

self.errors.add_to_base("Invalid Name")

错误信息

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

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

谢谢。

【问题讨论】:

  • 请提供更多您的型号代码。错误消息表明 self 指向类 Class 的实例,而不是模型类的实例。

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


【解决方案1】:

你应该在你的回调方法中调用它,类似于下面的

  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

【讨论】:

  • 很多自我(自我?)都可以省略。
【解决方案2】:

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

类方法在 ruby​​ 上如下所示:

def self.checkFoo()
  ...
end

实例方法如下所示:

def checkFoo()
  ...
end

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

class MyModel < ActiveRecord::Base
  validate :foo

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

【讨论】:

    【解决方案3】:

    通常使用验证回调,模型错误用于导致预期数据库保存失败并为最终用户设置上下文错误消息。 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
    

    【讨论】:

      【解决方案4】:

      看起来您的 'self.errors.add_to_base("Invalid Name")' 没有任何问题

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

      干杯

      同人

      【讨论】:

        猜你喜欢
        • 2011-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多