在视图中显示来自另一个模型的值

Displaying values from another model in view

我是新手,我确定有一个简单的问题。我有 2 个模型,客户(有很多工作)和工作(属于客户)。我有一个显示作业详细信息的视图。我想 select 来自客户的数据,但出现错误。

作业控制器中的索引操作:

@jobs = Job.all(NB也试过了@jobs = Job.includes(:customer).all

在我看来:

<% @jobs.each do |job| %>
  ...
  <td><% job.customer.surname %></td>`

但我收到以下错误:

undefined method `surname' for nil:NilClass

请问我做错了什么?

虽然 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,则应用程序的另一部分可能有问题。可能性很小:

  • jobs#create 没有将客户分配给作业。

    要防止出现这种情况,请编辑 Job 并添加 validates :customer, presence: true

  • job.customer_id 可能包含无效的外键(即 job.customer_id 存在,但没有 Customeridjob.customer_id).

    为了防止这种情况,在 Customer 中添加 has_many :jobs, dependent: :destroy 确保在销毁客户时销毁所有作业。