Rails - 从嵌套验证错误消息中省略模型名称

时间:2016-02-18 16:08:48

标签: ruby-on-rails validation activerecord

在我的item模型中,我有一行has_many :user_items, validate: true来验证user_item模型在item获得验证时的效果。验证错误消息如下所示:

>>  @item.errors
=> ... @messages={:name=>["can't be blank"],
                  :description=>["can't be blank"],
                  :"user_items.picture"=>["can't be blank"], 
                  :user_items=>["is invalid"]}>
>>  @item.errors.full_messages
=> ["Name can't be blank",
    "Description can't be blank", 
    "User items picture can't be blank",
    "User items is invalid"]

_error_messages.html.erb

<% if target.errors.any? %>
  <div id="error_explanation">
    <div class="alert alert-danger">
      The form contains <%= pluralize(target.errors.count, "error") %>.
    </div>
    <ul>
    <% target.errors.full_messages.each do |msg| %>
      <li><%= msg %></li>
    <% end %>
    </ul>
  </div>
<% end %>

项目的错误消息未显示项目名称。例如,错误消息未显示&#34;项目描述不能为空白&#34;它只显示&#34;描述不能为空。&#34;我怎样才能使用户项目的错误消息以相同的方式省略模型名称,例如&#34;图片不能为空白&#34;而不是&#34;用户项目图片不能为空白&#34;?

1 个答案:

答案 0 :(得分:6)

您可以使用ActiveRecord的内置I18n实现。按如下方式更新您的config/locales/en.yml

en:
  activerecord:
    attributes:
      item/user_items:
        picture: 'Picture'

这将确保您user_items.picuture的验证邮件显示“图片”。而不是&#39;用户项目图片&#39;对于属性名称。

有关详细信息,请参阅"Translations for Active Record Models"