【发布时间】:2010-09-12 21:59:35
【问题描述】:
背景
正常的 rails 急切加载集合的工作方式如下:
Person.find(:all, :include=>:companies)
这会生成一些 sql
LEFT OUTER JOIN companies ON people.company_id = companies.id
问题
但是,我需要一个自定义连接(如果我使用 find_by_sql,也会出现这种情况)所以我不能使用原版 :include => :companies
自定义 join/sql 将为我提供所需的所有数据,但我如何告诉 activerecord 它属于关联的Company 对象,而不仅仅是一堆额外的行?
更新
我需要在连接中添加额外的条件。像这样的:
SELECT blah blah blah
LEFT OUTER JOIN companies ON people.company_id = companies.id AND people.magical_flag IS NULL
<Several other joins>
WHERE blahblahblah
【问题讨论】:
-
我遇到了同样的问题。开箱即用基本上不可能对 JOIN 而不是 WHERE 施加动态条件。插件/猴子补丁似乎是现阶段唯一合理的解决方案。
-
你有没有参考任何插件/补丁来完成这个?
标签: sql ruby-on-rails ruby activerecord