ruby-on-rails - 从错误的完整错误消息中删除前缀属性名称[:base]

标签 ruby-on-rails ruby-on-rails-3

我们正在创建一个 Rails 表单,它使用 dynamic_form gem 来显示错误消息。对于表单与之交互的模型之一,我们创建了一个自定义验证器:

class Contact < ActiveRecord::Base
  belongs_to :agency

  validate :new_signups_have_contact_information

  def new_signups_have_contact_information
    if agency && agency.is_new_signup?
      unless (email && email != '') || (phone && phone != '')
        errors[:base] << "Please include a phone number or email."
      end
    end
  end
end

到目前为止,一切都很好。但是,当我们显示这些错误时,我们的 View 是:

<%= form_for @contact do |contact_form| %>
  <%= contact_form.error_messages %>
  <%# snip %>
<% end %> 

我们在验证失败时生成的错误中收到此消息:

Contacts base Please include a phone number or email.

我们如何从生成的错误字符串中删除前置的“联系人库”?

<小时/>

我们做了一些研究:我们知道这种情况正在发生,因为默认情况下,Rails 的错误消息系统 automatically prepends attribute names to their error strings 。另外,大多数情况下,我们可以modify the English localization fileremove the prepended strings .

但是,Rails 官方指南并未列出如何更改提供给 errors[:base] 数组或使用自定义验证生成的错误消息的本地化。它列出了如何覆盖为 all of the built-in validations 生成的字符串。 ,但没有其他错误。

因此,我们愿意使用的一种方法是:我们如何配置 config/locales/en.yml 以删除前置的“Contacts base”字符串?

<小时/>

我们研究的另一种不愿使用的方法是打开 ActiveRecord::Errors 类并编写我们自己的 errors#full_messages 函数的实现。 (This blog post 描述了该技术。)此方法更改了整个项目的 ActiveRecord::Errors 类的行为,我们宁愿使用具有更大本地影响的方法。 如果我们无法使用 lcoalization 文件来实现我们想要的目的,是否有比打开 ActiveRecord:Errors 类更直接的方法?

<小时/>

编辑

contact.errors 哈希值是:

$ contact.errors.to_yaml
--- !ruby/object:ActiveModel::Errors
base: !ruby/ActiveRecord:Contact
  attributes:
    id:
    # snip
messages: !omap
- :base:
  - Please include a phone number or emai.

最佳答案

看起来您的验证器正在使 :base 显示为属性,请使用此语言环境覆盖它。

# config/locales/en.yml
en:
  activerecord:
    attributes:
      contacts:
        base: "" 

关于ruby-on-rails - 从错误的完整错误消息中删除前缀属性名称[:base],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24129274/

相关文章:

ruby-on-rails - Rails 使用 Twitter Bootstrap 导航栏登录(w/Devise)?

ruby-on-rails - 对 Gutentag 标签进行搜查 - 未定义方法 `type' for nil :NilClass

ruby-on-rails - 如何在 WampServer 旁边安装 Ruby on Rails?

ruby-on-rails - 在 Rails 3 生成器中多次调用任务

ruby-on-rails - 如何在rails Devise gem中为单个用户关联多个电子邮件

ruby-on-rails - 在 ruby​​ on rails 3 上的 sunspot 1.2 中获得没有分页的点击次数

ruby-on-rails - `default_controller_and_action' : missing :controller (ArgumentError) in Ruby 3

ruby-on-rails - 将 JSON Api 映射到 Rails 中的模型

ruby-on-rails - 使用 Ruby fastercsv,想将我的文件分成 1000 行

ruby-on-rails - 使用 Authlogic 发送注册验证电子邮件?