2016-02-18 33 views
2

在我item型號我也行has_many :user_items, validate: trueitem得到確認,以驗證相關user_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 %> 

的項目不顯示的項目名稱錯誤消息。例如,錯誤消息不顯示「項目描述不能爲空」,它只顯示「描述不能爲空」。我該如何做到這一點,所以用戶項目的錯誤消息以相同的方式省略了模型名稱,例如「圖片不能爲空」而不是「用戶項目圖片不能爲空」?

回答

4

您可以使用ActiveRecord的內置I18n實現。更新您的config/locales/en.yml如下:

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

這將確保爲user_items.picuture顯示「圖片」您的驗證消息,而不是「用戶項目的畫面」的屬性名稱。

查看"Translations for Active Record Models"瞭解更多詳情。