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

use*_*963 3 validation activerecord ruby-on-rails

在我的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"]
Run Code Online (Sandbox Code Playgroud)

_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 %>
Run Code Online (Sandbox Code Playgroud)

项目的错误消息不显示项目名称.例如,错误消息未显示"项目描述不能为空",它只显示"描述不能为空".如何使用户项目的错误消息以相同的方式省略模型名称,例如"图片不能为空"而不是"用户项目图片不能为空"?

vee*_*vee 6

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

en:
  activerecord:
    attributes:
      item/user_items:
        picture: 'Picture'
Run Code Online (Sandbox Code Playgroud)

这将确保您的验证消息user_items.picuture显示"图片",而不是"用户项目的画面"的属性名称.

有关详细信息,请参阅"Active Record Models的翻译".