1

我是一个 n00b,但仍在为加入而苦苦挣扎。

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

我使用了关联“has_many :through”而不是“has_and_belongs_to_many”,因为我需要将另一列添加到图表表中 [称为patient_mrn],而对于“has_and_belongs_to_many”场景,我无法做到这一点。

我试图做的是显示给定的患者及其所有相关的提供者[每个都有其特定的患者_mrn]

患者模型具有:

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

提供者模型具有:

has_many :charts has_many :患者, :through => :charts

并且图表模型具有:

belongs_to :patient
belongs_to :provider

然后在患者控制器中的表演动作中,我有:

@patient = Patient.find(params[:id])
@providers = Provider.joins(:charts)where(:charts => { :patient_id => @patient.id})

在我的病人看来,我有:

<h1>Listing providers</h1>

<table>
  <tr>
    <th>Provider name</th>
    <th>Patient_mrn</th>
  </tr>

<% @providers.each do |provider| %>
  <tr>
    <td><%= provider.name %></td>
    <td><%= provider.chart.patient_mrn %></td>
  </tr>
<% end %>
</table>

我意识到控制器动作和视图都写错了,但不知道如何修复它们。

4

1 回答 1

1

这应该有效:

provider_ids = @patient.charts.select(:provider_id).map(&:provider_id)
@providers = Provider.includes(:charts).find provider_ids

在第一行中,您可以获得所有患者图表的提供者。该映射是必要的,因为 select 不返回整数数组,而是返回一个结构数组,其中只有一个成员,provider_id。

在第二行中,您只需选择相应的提供程序并包含图表,这样您就不必处理 N+1 查询(请参阅http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations) .

我看不出你的观点有什么问题,但我可能错了。

于 2013-04-28T10:19:48.977 回答