2016-12-05 8 views
0

私は、使用しているデータセットに対してhas_many:throughを実装することと完全に混同しています。だから、私は2つのテーブルれている - scheme_masterscheme_detailhas_manyとの混乱:through

scheme_masterは、これらのフィールドを持っている - ID

からID、scheme_detail_idは、scheme_detailは1つの関連分野を持っている

をprimary_scheme_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 

以下の通りですスキーム? 1,2,3、私はchild_schemesのscheme_detailを参照するでしょう関連付けをしたい -

は現在、

SchemeMaster.find(1).child_schemes 

は私にすべての子スキームを提供します。ありがとうございました。

+0

'has_many:scheme_details、through::child_schemes'を試してください – jvnill

+0

スタックレベルが深すぎます。 :( –

答えて

1

まず、scheme_masters表はscheme_detail_idを持っているので、あなたはこれが

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

child_schemesscheme_detailをフェッチするために行う、child_schemesのすべてscheme_detailをフェッチするために、今、この協会

class SchemeMaster < ActiveRecord::Base 
    belongs_to :scheme_detail 
end 

class SchemeDetail < ActiveRecord::Base 
    has_one :scheme_master 
end 

を変更する必要があり、あなたは、scheme_master.child_schemes.first.scheme_detailすることができます。

希望に役立ちます!