如何根据has_many:through关系的属性找到rails对象?

时间:2011-06-10 14:26:54

标签: ruby-on-rails activerecord has-many-through

模特: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应用程序,但我不认为此功能从那时起已经发生了变化。

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'