2016-12-05 68 views
0

我完全混淆了has_many:through對於我正在使用的數據集。所以,我有兩個表 - scheme_masterscheme_detail與has_many混淆:通過

scheme_master有這些領域 - ID,scheme_detail_id,primary_scheme_id

scheme_detail有一個相關領域 - ID

scheme_master中的每個方案都有一個主要方案這是自我參照scheme_master表。例如,方案1是方案1,2,3的主要方案。

相關代碼如下

scheme_master.rb

class SchemeMaster < ActiveRecord::Base 
    has_one :scheme_detail 
    has_many :child_schemes, class_name: "SchemeMaster", 
    foreign_key: :primary_scheme_id, primary_key: :id 
end 

scheme_detail.rb

class SchemeDetail < ActiveRecord::Base 
    belongs_to :scheme_master 
end 

我的問題是如何訪問我的所有孩子的計劃詳情方案?

目前,

SchemeMaster.find(1).child_schemes 

給了我所有的子計劃 - 1,2,3,但我希望有一個協會,將參照child_schemes的scheme_detail。謝謝。

+0

只是嘗試'has_many:scheme_details,通過:: child_schemes' – jvnill

+0

它引發堆棧級別太深的錯誤。 :( –

回答

1

首先,scheme_masters表有scheme_detail_id,所以你需要改變這種關聯

class SchemeMaster < ActiveRecord::Base 
    belongs_to :scheme_detail 
end 

class SchemeDetail < ActiveRecord::Base 
    has_one :scheme_master 
end 

現在,來獲取child_schemes的所有scheme_detail,做到這一點

scheme_master = SchemeMaster.includes(child_schemes: :scheme_detail).where(id: 1).first 

要提取的child_schemesscheme_detail,你可以這樣做,scheme_master.child_schemes.first.scheme_detail

希望有幫助!