【问题标题】:How to access data from has_many :through association?如何从 has_many 访问数据:通过关联?
【发布时间】:2013-04-22 16:09:42
【问题描述】:

我有两个模型:通过表格图表连接的患者和提供者。

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

我要做的是向给定的患者及其所有相关的提供者显示 [每个都有其名称和特定的患者_mrn]。

我通过抓取包含给定患者 ID 的所有图表来做到这一点。然后我可以使用

轻松显示每个图表中的 patient_mrn
<%= chart.patient_mrn %>

但是当我尝试通过图表到达提供者模型以使用

获取提供者名称时
<%= chart.provider.provider_name %> 

我收到一个“未定义的方法 `provider_name' for nil:NilClass”错误。

我在这里做错了什么?以下是代码中的更多详细信息:

患者模型具有:

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

Provider 模型有:

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>

【问题讨论】:

  • 这是因为您将chart.provider 设为nil
  • 对不起Shweta,我是n00b,不懂。能详细点吗?

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


【解决方案1】:

这是因为您将chart.provider 视为nil

在您的 charts 表中,您可能有带有 null provider_id 的行

在您的providers 表中,charts 表中没有provider_id 的记录(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.

【讨论】:

    猜你喜欢
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多