2016-08-04 100 views
0

這是我需要幫助的一個奇怪問題。從默認驗證方法自定義錯誤消息rails

所以我想驗證複選框在我的表格,以便ATLEAST一個必須選擇:

... 
<div class="form-group"> 
    <%= f.collection_check_boxes(:topping_ids, Topping.all, :id, :name, include_hidden: false) do |b| %> 
    <ul> 
     <li><%= b.check_box %> - <%= b.label %></li> 
    </ul> 
</div> 
... 

我的模型:

class Pizza < ApplicationRecord 
    has_many :pizza_toppings, dependent: :destroy 
    has_many :toppings, through: :pizza_toppings 

    validates_presence_of :name 
    validates_length_of :topping_ids, minimum: 1, message: "You must select at least 1 topping" 
end 

我的錯誤部分:

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

這是錯誤的樣子:

snapshot

如何更改或擺脫錯誤中的「Topping ID」。我學會了如何改變信息,但我不確定我會爲「澆頭ids」改變什麼,它顯然沒有提供給用戶。我不想從本地或其他類似的東西中更改完整的錯誤,因爲我對其他表單使用了驗證,因此我希望能夠看到這些錯誤,這是我需要修改的唯一錯誤。

+0

你必須提供在當地人的文件名替代爲特定的屬性。 –

回答

1

使用語言環境來定製錯誤消息。

# config/locales/en.yml 
en: 
    activerecord: 
    attributes: 
     pizza: 
     topping_ids: "" 

您將需要重寫屬性名稱。

但要記住的屬性名稱將不被顯示在任何位置,當您使用

errors.full_messages 

或與errors.messages代替errors.full_messages

+0

更改語言環境中的特定屬性對我所需要的內容非常適用!謝謝! – ravip0711

0

你可以使用<% object.errors.values.flatten.each do |msg| %>代替去。

0

或者試試這個:

<% object.errors.full_messages.each do |attr,msg| %> 
    <li class="errors-alert-item text-center"><%= msg %></li> 
<% end %> 

如果你這樣做來代替:

<%= attr %> <%= msg %> 

你得到的屬性此錯誤消息的名稱

+0

啊,這將工作,但我有部分錯誤代碼,我想用於多個窗體,以保持我的代碼幹。我需要<%= attr %>用於其他驗證和表單,因此我無法完全刪除它。謝謝! – ravip0711

相關問題