【问题标题】:What is the Rails3 version of errors.add_to_base?什么是Rails3 版本的errors.add_to_base?
【发布时间】:2011-01-20 20:17:44
【问题描述】:

我想在 Rails 3 中编写自定义验证,但遵循 this example 我得到:

'ActiveModel::DeprecatedErrorMethods.add_to_base' call is deprecated in Rails 3.0

什么是rails3版本:

def validate
   errors.add_to_base "If you are attaching a file you must enter a label for it" if !attachment.blank? and attachment_label.blank?
end

【问题讨论】:

    标签: validation ruby-on-rails-3 model


    【解决方案1】:

    这应该在 rails 3.1.3 中工作:

    errors.add :base, "message"
    

    【讨论】:

      【解决方案2】:

      来自http://apidock.com/rails/ActiveRecord/Errors/add_to_base

      在 Rails 3 中使用 model_instance.errors[:base] << "Msg" 而不是弃用的 model_instance.errors.add_to_base("Msg")

      【讨论】:

      • 如果你想让 Rails 从一个语言环境中查找消息,你可以使用 errors.add(:base, :your_error_symbol) 并将其存储在 [locale].activerecord.errors.[model] 中。 your_error_symbol
      【解决方案3】:

      对我来说,这个“hack”效果最好:

      instance.errors.add("", "Msg")
      

      当我尝试将 "base" 指定为第一个参数时,词库不断插入到我的验证消息中。

      【讨论】:

      • 那是因为您使用了字符串"base" 而不是符号:base。有区别:robertsosinski.com/2009/01/11/…
      • 不是这样,它添加了 base 甚至作为一个符号,至少对于 Rails 3.1.3。
      • 我刚刚在我当前的项目(rails 3.1.2)中检查了这个,并且 base 没有被插入到我的消息中。这可能在 3.1.3 中发生了变化,但我会感到惊讶。
      • 我遇到了同样的问题,但我的问题是呈现错误消息。使用 full_messages 而不是 messages 可以很好地从消息中删除“Base”。
      • @BrianDonovan 该链接不再有效。对于其他人,请参阅the archived snapshot
      【解决方案4】:

      尝试使用以下格式,

      errors[:base]

      它不会在您的验证消息之前插入任何内容。

      【讨论】:

        猜你喜欢
        • 2013-11-25
        • 2010-11-22
        • 1970-01-01
        • 2011-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多