当我用数据手动替换nil值时,我没有错误。
<% @visits.each do |f| %>
<tr>
<td><%=f.owner.car_number unless f.owner.car_number.nil?%></td>
<td><%=f.owner.car_type unless f.owner.car_type.nil?%></td>
<td><%=f.owner.car_year unless f.owner.car_year.nil?%></td>
<td><%=f.owner.first_name unless f.owner.first_name.nil?%> <%=f.owner.last_name unless f.owner.last_name.nil?%></td>
<td><%=f.owner.phone unless f.owner.phone.nil?%></td>
<td style="direction:ltr"><%=f.created_at.strftime("%d/%m/%Y")%></td>
<td>XX NOTES </td>
</tr>
答案 0 :(得分:1)
我假设@visits
包含有效的对象列表。
现在,让我们仔细阅读错误:
未定义的方法`car_number&#39;为零:NilClass
你在哪里申请car_number
?提示:对象f.owner
。含义f.owner
为nil
,因此f.owner.car_number.nil
仍然会出错。
将它们调整为:
<%= f.owner.car_number if f.owner %>
或更好:
<% @visits.each do |f| %>
<tr>
<% if f.owner %>
<td><%=f.owner.car_number %></td>
<td><%=f.owner.car_type %></td>
<td><%=f.owner.car_year %></td>
<td><%=f.owner.first_name %> <%=f.owner.last_name %></td>
<td><%=f.owner.phone %></td>
<td style="direction:ltr"><%=f.created_at.strftime("%d/%m/%Y")%></td>
<td>XX NOTES </td>
<% end %>
</tr>
答案 1 :(得分:1)
最好还是需要添加验证以停止nil
owner
在visit
中的输入,或者该关联已通过访问为所有者定义的模型
我在这里考虑visit model
有一个owner
class Visit < ActiveRecord::Base
has_one :owner
validates :owner, presence: true
end
使用try
<% @visits.each do |f| %>
<tr>
<% ["car_number", "car_type","car_year", "first_name", "last_name", "phone"].each do |meth| %>
<td><%= f.try(:owner).send(meth) %></td>
<% end %>
<td style="direction:ltr"><%=f.created_at.strftime("%d/%m/%Y")%></td>
<td>XX NOTES </td>
</tr>
<% end %>
答案 2 :(得分:0)
检查第一次迭代。
而不是:
DateTime.Now
使用..
unless f.owner.car_number.nil?
或者您可以在迭代前先检查,例如:
unless f.owner.nil?