模特:Foo,Bar,Bonk
class Foo < ActiveRecord::Base
has_many :bars
has_many :bonks, :through => :bars
end
class Bar < ActiveRecord::Base
has_many :bonks
end
如何检索与名称为“awesome”的Bonk关联的 Foo 对象列表
我知道如何使用涉及:join和a:condition的Foo.find(...)。我想要做的是避免将那么多原始sql推入那里(特别是当中间有多个模型时)。
像
这样的东西Foo.find(:all, :conditions=>["bonks.name = ?", 'awesome'])
显然,它不起作用,因为它生成
Select * from foos where bonks.name = 'awesome'
可悲的是,我在这里处理的是一个rails 1.2应用程序,但我不认为此功能从那时起已经发生了变化。
答案 0 :(得分:1)
在1.2中 - :joins
参数中的SQL片段是您最好的选择。没有更好的方法来做到这一点。
答案 1 :(得分:1)
Foo.find(:all, :conditions=>["bonks.name = ?", 'awesome'], :include => :bonks)
应该生成
的内容Select * from foos, bars, bonks where bars.foo_id = foo.id and bonks.bar_id = bar.id and bonks.name = 'awesome'