如何从has_many访问数据:通过关联?

时间:2013-04-29 04:13:05

标签: ruby ruby-on-rails-3.2 has-many-through

我有两个模型:患者和提供者通过表格图表加入。

我使用了关联“has_many:through”[而不是“has_and_belongs_to_many”],因为我需要在Chart表中有另一列[called patient_mrn]

我要做的是展示给定的患者及其所有相关的提供者[每个提供者的姓名和具体的患者_mrn]。

我通过抓取包含给定patient_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>

1 个答案:

答案 0 :(得分:0)

这是因为您chart.providernil

charts表格中,您可能会有null provider_id

providers表格中,provider_id表格中没有charts的记录(ID)

<强>尝试:

<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.