2014-12-21 5 views
1

У меня есть модель Vendor с ассоциацией:Rails 4 жадная загрузка HAS_ONE и belongs_to

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

Проблема в том, что у вас есть поставщик, у которого нет соответствующей школы.

So 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)) 
+0

Спасибо тонну! Это работает. –

Смежные вопросы