2013-04-28 72 views
1

我是一個n00b,仍然掙扎着加入。如何在rails中通過和belongs_to關聯執行has_many的連接表?

我有兩種模式:患者和提供者通過表格圖表連接。

我使用關聯「has_many:through」而不是「has_and_belongs_to_many」,因爲我需要將另一列添加到Chart表[稱爲patient_mrn],我無法對「has_and_belongs_to_many」場景進行操作。

什麼即時試圖做的是出現在特定的病人及其所有相關供應商[各有其特定的patient_mrn]

病人模型有:

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

提供者模型有:

的has_many:圖表 的has_many:患者:通過=>:圖表

和圖表模型具有:

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> 

我同時實現控制器動作和視圖寫錯了,但無法弄清楚如何解決它們。

回答

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)。

我看不出你的觀點有什麼問題,但我可能是錯的。

+0

感謝Daniel-我感謝您的幫助!我需要真的打這些書。 – user2284821 2013-04-29 04:11:16

相關問題