我试图通过续集宝石的eager
方法渴望加载关系数据,同时使用with_sql
来定义用于查询的SQL(这是一个相当复杂的查询)。急切的加载根本不起作用。相反,它为每个返回的行生成每个关系的单个查询,这正是我试图避免的。下面是一些代码:当使用with_sql时,续集是否可以加载关系?
class Foo
many_to_one :rel1
one_to_many :rel2
def self.bar
sql = 'some complex sql'
Foo.with_sql(sql).eager(:rel1, :rel2)
end
end
的问题是,当我叫Foo.bar,REL1和REL2的急切装载的好像忽略了。我通过观看日志验证了这一点 - 对于with_sql
调用返回的每一行,它会生成2个查询 - 一个用于rel1,另一个用于rel2。
可能值得注意的是sql
包含3个连接。
这是使用with_sql
的限制。有没有办法解决这个限制?
你为什么使用'eager'宝石? SQL应该自己“急切加载”。你可以做的一件事是用一个简单的查询更新问题,也许只有一个连接。 –