2014-03-14 36 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; }