2017-11-08 22 views
1

BとモデルCに属するAというモデルがあります。モデルBCに属します。私はAのインスタンスがBCを参照するようにしたい場合は、Bが存在する場合はそれ自身のCを参照してください。ActiveRecordに条件付きのbelongs_toとhas_oneの関連付けがありますか?

だから私は一種の

belongs_to :B, optional: true 
belongs_to :C 
has_one :C, through: :B 

Aのために)したいが、私はCの会合がBの存在に依存することにしたいです。これをどのように達成するのですか?

注:Aのクエリを効率的にするため、A.all.includes(:C)も有効です。

+0

'B'と' C'の関連付けを同時に指定するには 'A'が必要でしょうか? – AntonTkachov

+0

@AntonTkachovいいえ、私はそうは思わない。 – Derek

+0

Aが「belongs_to」Cと「has_one」の両方を持っている理由は不明です。達成したい階層を明確にすることはできますか? – inveterateliterate

答えて

0

私はポリモーフィックな関連で行くので、B(association_type: 'B' とassociation_id:...)のいずれかがあるAモデルでしょうかC(association_type: 'C' とassociation_id:...を)。

この後の唯一の問題は、A.includes(:C)の処理方法です。私たちは、そのような振る舞いを置き換えるカスタム解決策を書くための何らかの方法について考えることができます。とにかくincludesは追加クエリを実行します。

あなたがこのようなアプローチがあなたにとって有益だと思うなら、私はいくつかのカスタム解決策について考え、私の心を共有します。

関連する問題