我试图通过 Sequel gem 的eager
方法急切加载关系数据,同时使用with_sql
定义用于查询的 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
. 有没有办法绕过这个限制?