在视图中显示其他模型的值

时间:2015-12-09 18:46:23

标签: ruby-on-rails ruby-on-rails-3

我是新手,并且有一个简单的问题我敢肯定。我有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

我做错了什么?

1 个答案:

答案 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存在,但Customerid的{​​{1}}没有。

    要防止这种情况发生,请在job.customer_id内添加Customer 当客户被销毁时,确保所有工作都被销毁。