2016-10-27 6 views
0

私は、自分のコードで実行されたクエリの数を最適化することを意味しています。rails activerecord - 単一のクエリで祖父母の値を取得する

のは、私はこの関連のチェーンを持っているとしましょう:

A belongs to B 
B belongs to C 
C belongs to D 

はのは、私は、オブジェクトを持っていると私は私が3つのクエリを(せずにそれについて移動するにはどうすればよいD. に表示されるフィールドを取得したいとしましょう素朴なアプローチ):

a.b.c.d.value 

明確にするために、私はすでにAのオブジェクトを手にしています。 (上記のコードでです)

答えて

0

私は最終的には次のように構築された:

A.where("a.id = #{a.id}").joins(b: [{c: :d}]).select("d.value").pluck(:value) 
0

ここでは、ネストされた結合クエリを使用できます。

A.joins(B: [{C: :D}]). 
     where(D.column_name => "Any Value") 
+0

を使用することができるはずです。手元にあるオブジェクトのインスタンスをすでに持っているので、オブジェクトに対して結合を使用することはできません。さらに、それはクエリであり、値を取得したい(これは何であるか分からない) –

+0

実際のシナリオを更新して、より理解しやすくすることができます。 – user100693

0

あなたが試してみました:

class a 
    belongs_to :b 
    has_one :d, :through :b 
end 

class b 
    belongs_to :c 
    has_one :d, :through :c 
end 

をあなたはその後、私のために仕事を文句を言わないa.d

関連する問題