2013-04-29 3 views
0

У меня есть две модели: пациент и провайдер присоединились к таблице Chart.Как получить доступ к данным из has_many: через объединение?

Я использовал ассоциации «has_many: через» [вместо «has_and_belongs_to_many»], потому что мне нужно иметь еще один столбец в таблице Chart [называется patient_mrn]

То, что я пытаюсь сделать это, чтобы показать данного пациента и всех связанных с ним поставщиков [каждый со своим именем и конкретным пациентом_mrn].

Я делаю это, хватая все диаграммы, содержащие данный пациент_ID. Тогда я могу легко отобразить patient_mrn от каждой диаграммы с помощью

<%= chart.patient_mrn %> 

Но когда я пытаюсь достичь с помощью диаграммы в модели поставщика, чтобы захватить имя поставщика с помощью

<%= chart.provider.provider_name %> 

я получаю «неопределенный метод `provider_name 'для nil: ошибка NilClass.

Что я здесь делаю неправильно? Вот более подробно из кода:

Модель больного:

has_many :charts 
has_many :providers, :through => :charts 

Модель Поставщик имеет:

has_many :charts 
has_many :patients, :through => :charts 

и модель Диаграмма имеет:

belongs_to :patient 
belongs_to :provider 

Тогда в моем действии шоу в контроллере пациента у меня есть:

@patient = Patient.find(params[:id]) 
@charts = Chart.where(:patient_id => @patient.id) 

И в моем шоу зрения для пациента у меня есть:

<h2>Listing Providers</h2> 

<table> 
    <tr> 
    <th>Patient mrn</th> 
    <th>Provider</th> 
    </tr> 

<% @charts.each do |chart| %> 
    <tr> 
    <td><%= chart.patient_mrn %></td> 
    <td><%= chart.provider.provider_name %></td> 
    </tr> 
<% end %> 
</table> 
+0

Это потому, что вы получаете 'chart.provider' как' nil'. – shweta

+0

Извините, Швета, я n00b и не понимаю. Не могли бы вы рассказать? – user2284821

ответ

0

Это потому, что вы получаете chart.provider в nil.

В вашем charts таблице вы можете иметь строки с null provider_id

или

В вашем providers таблице нет записи (идентификатор) присутствует с provider_id в charts таблице

Try:

<td><%= chart.provider.try(:provider_name) %></td> 

Calling try on nil always returns nil. It becomes specially helpful when navigating through associations that may return nil.

+1

Спасибо Shweta-, что работает !!! – user2284821