我是新手,并且有一个简单的问题我敢肯定。我有2个模型,客户(有很多工作)和工作(属于客户)。我有一个显示工作细节的视图。我想从客户那里选择数据,但收到错误。
作业控制器中的索引操作:
@jobs = Job.all
(NB也尝试了@jobs = Job.includes(:customer).all
)
在我看来:
<% @jobs.each do |job| %>
...
<td><% job.customer.surname %></td>`
但是我收到以下错误:
undefined method `surname' for nil:NilClass
我做错了什么?
答案 0 :(得分:1)
虽然Job
属于Customer
,但给定job.customer
可能是nil
!
首先,您可以在视图中查看此内容:
<% jobs.each do |job| %>
<% if job.customer.blank? %>
<!-- debugging info: -->
<p>Oops, this Job doesn't have a customer</p>
<p>customer_id is <%= job.customer_id.inspect %>)</p>
<% else %>
<p><%= job.customer.surname %></p>
<% end %>
<% end %>
如果事实证明某些Job
没有Customer
s,那么该应用的其他部分可能会出现问题。可能性很小:
jobs#create
未将客户分配给作业。
要防止这种情况发生,请修改Job
并添加validates :customer, presence: true
。
job.customer_id
可能包含无效的外键(即job.customer_id
存在,但Customer
为id
的{{1}}没有。
要防止这种情况发生,请在job.customer_id
内添加Customer
当客户被销毁时,确保所有工作都被销毁。