【问题标题】:How to do join table for has_many through and belongs_to associations in rails?如何在rails中为has_many through和belongs_to关联做连接表?
【发布时间】:2013-04-22 00:32:30
【问题描述】:

我是一名 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

Provider 模型有:

has_many :charts has_many :patients, :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>

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

【问题讨论】:

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


    【解决方案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)。

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

    【讨论】:

    • 谢谢丹尼尔-感谢您的帮助!我需要认真阅读。
    猜你喜欢
    • 1970-01-01
    • 2011-04-21
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多