2014-03-14 110 views
0

我有一個表單如Ruby on Rails的 - 嵌套模型形式的錯誤消息

<%= form_for @checkout_form, url: checkout_path(@checkout_form), html: {class: 'details-form', method: :put} do |f| %> 
    <%= f.fields_for :billing_address do |builder| %> 
     <% error_class = @checkout_form.billing_address.errors[:phone].any? ? 'error' : '' %> 
     <%= builder.text_field :phone, class: "text #{error_class}" %> 
    <% end %> 
<% end %> 

一切工作除了錯誤類罰款。我不太清楚在這種情況下我能如何抓住特定領域的錯誤。

如果我嘗試這樣我得到

undefined method `errors' for nil:NilClass 
+1

這段代碼肯定是不完整的,'f.fields_for:billing_address'行中的'do'沒有關閉。確定沒有其他<% end %>行?此外,該錯誤非常簡單 - billing_address爲零,請檢查它是否首先存在。 – jamuraa

+0

我錯過了最後的結局,是的。我不想複製表單中的所有其他字段,因爲它已經在第一個錯誤類行中崩潰了。例如,我只想知道如何訪問表單字段<%= builder.text_field:phone%>的錯誤。 –

回答

0

錯誤消息告訴你,@checkout_form.billing_address爲零, 因爲它是這裏的「錯誤」被稱爲唯一的位置。

如果它是零,它不能有錯誤字符串附加。

您需要檢查您的控制器和型號。

0

下面是你的資源:How to change the default rails error div "field_with_errors"

從我的理解,錯誤的表單字段都包裹着這個div:<div class="field_with_errors"></div> - 如果你只是試圖展示元素的不同風格(沒有消息),爲什麼你不只是在你的css風格呢?

#app/stylesheets/application.css 
.field_with_errors input { border: 1px solid #ff0; }