1

次のようなネストされた構造があるとしましょう

Resource A
-id

Resource B
-id
-a_id

Resource C
-id
-b_id

Resource D
-id
-c_id

a_id を指定すると、次のような 1 つのクエリですべての D を取得したいと思います。

SELECT * 
FROM D
JOIN C on c_id
JOIN B on b_id
WHERE B.a_id = a_id

この SQL をインライン化できることはわかっていますが、ActiveRecord リレーションでこれを行う方法があるかどうか疑問に思っていましたか?

4

2 に答える 2

1
class A < ActiveRecord::Base
 hash_many :bs
end

class B < ActiveRecord::Base
  belongs_to :a
  has_many :cs
end

class C < ActiveRecord::Base
 belongs_to :b
 has_many :ds
end

class D < ActiveRecord::Base
 belongs_to :c
end

C.joins(:c => :b).where(:b => {:a_id => <given_a_id>})
于 2013-10-16T19:53:25.110 に答える
0

active_record ドキュメントで答えを見つけました。

D.joins(C: :B).where(B: { a_id: a_id})
于 2013-10-16T19:51:57.557 に答える