2013-10-16 58 views
1

比方说,我有嵌套像如何使用活动记录通过它的根资源ID查询资源?

Resource A 
-id 

Resource B 
-id 
-a_id 

Resource C 
-id 
-b_id 

Resource D 
-id 
-c_id 

结构给定一个A_ID我想抓住所有的Ds在一个查询,如:

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

我知道我可以内联这个SQL,但我想知道如果有办法做到这一点与ActiveRecord关系?

+0

你要求的轨道'includes'或'join'方法跃跃欲试负载关联? – phoet

回答

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>}) 
0

在active_record文档中找到答案。

D.joins(C: :B).where(B: { a_id: a_id})