Rails 4急切加载has_one和belongs_to

时间:2014-12-21 17:36:33

标签: ruby-on-rails eager-loading belongs-to has-one

我有一个关联的模型供应商:

has_one :school, foreign_key: "school_vendor_id"

我有一个模范学校和协会:

belongs_to :vendor, foreign_key: "school_vendor_id"

我已经做了急切的加载:

@vendors = Vendor.includes(:school).where(:business_id=>@business.id)

我的问题出在观点中。

<% @vendors.each do |v| %><br/>
<%= v.vendor_name %><br/>
**<%= v.school.id %>**   //Gives an error
undefined method `id' for nil:NilClass

如果我<%= v.school.inspect %>,我会得到以下结果

#<School id: 1, school_vendor_id: 1.................

我无法弄清楚如何显示学校记录。

1 个答案:

答案 0 :(得分:1)

问题是你有一个没有相关学校的供应商。

因此v.school返回nil而v.school.id会为特定供应商引发错误。

您的v.school.inspect正在返校,因为它适用于其他供应商。

要解决此问题,请在视图中使用v.school.try(:id) || 'No associated school'。然后在您看来,您将能够看到哪些供应商没有学校。

您还可以在Rails控制台中执行以下操作,以查看哪些供应商没有学校。

Vendor.where("id NOT IN (?)", School.pluck(:vendor_id))
相关问题