2009-10-18 34 views
4

较新的加载方式使用多个查询来加载关联。是否有可能为这些额外的热切加载查询添加条件?例如随意加载条件

Bakery.find(:all, :include => :bakers)

将生成类似于此的预先加载查询:

选择bakers * FROM bakers WHERE(bakers .bakery_id IN(1,2,3,4,5))

是否有可能为此热切加载查询添加条件?

更新: 要(也许)使之更清楚,我想用AR(SANS SQL)复制查询:

SELECT * FROM bakeries LEFT JOIN bakers ON bakeries.id =烤饼。 bakery_id和bakers.hat = '上'

具体来说,我希望能够修改第二急于加载的SQL语句是:

选择bakers * FROM bakers WHERE(bakers .bakery_id IN(1,2,3,4,5)AND bakers .hat ='on')

这是可能的,还是必须使用SQL?只需寻找“Rails”的方式来做到这一点。 :)

回答

1

那么,你想在关联的查询中更改什么?

可以肯定somethinglike这样的:

Bakery.find(:all, :include => :bakers, :conditions => ["bakers.something = ?", true]) 

如果我们有一点点更多的信息,有可能是一个更好的办法来做到这一点。根据你在找什么,你可能想看看named_scope s,这可以连锁在一起,如:

Bakery.bakers.available 

named_scope是相当整洁。

+0

感谢您的回复Bill。我尝试过这种方法,但它会执行一次加入,只返回符合条件的面包房。我想要的是,让所有的面包店,只有特定的面包师热切地加载。基本上,这两个查询的热切等同于:bakeries = Bakery.find(:all); bakers = bakeries.find(:all,:conditions => {:hat =>'on'}) – Jay 2009-10-18 06:39:13

+0

要添加更多,我正在使用Bakery.find(:all),并且在我看来,对于每个面包店,正在使用:bakery.bakers.find(:all,:conditions => {:hat =>'on'})。寻找一种方法来做到这一点,但没有所有额外的查询。 – Jay 2009-10-18 07:05:03

+0

感谢您的澄清。我不完全确定是否有办法获得您所需要的。也许玩几个named_scopes,看看你是否需要,但我有一种感觉,它不会。 – 2009-10-19 01:10:37