我有四个模型:a,b,c,d
这就是我想要做的事情:
a has_many b, :through => c
a has_many d, :through => b
以便在控制台中我可以这样做:
a.b
a.b.first.d
a.d
目前前两个命令可以正常工作但是在第三个命令上我得到了一个SQL错误。它似乎试图直接通过b得到d并且没有意识到a - > b经过c。
如何解决?
答案 0 :(得分:12)
对于遇到它的任何人都可以快速更新,这可以在Rails 3.1之后实现:http://guides.rubyonrails.org/3_1_release_notes.html
在您的示例中,以下是它的外观:
Class A
has_many :c
has_many :b, :through => :c, :source => :b
has_many :d, :through => :b, :source => :d
end
Class C
has_many :b
has_many :d, :through => :b, :source => :d
end
Class B
has_many :d
end
Class D
end
只是为了澄清!
答案 1 :(得分:5)
我认为您不能直接致电a.d
但是您可以a.b.map(&:d).flatten
获取d
a
的所有{{1}}