【发布时间】:2011-05-09 08:33:30
【问题描述】:
谁能解释一下?
Project.includes([:user, :company])
这将执行 3 个查询,一个用于获取项目,一个用于获取这些项目的用户,一个用于获取公司。
Project.select("name").includes([:user, :company])
这会执行 3 个查询,并完全忽略选择位。
Project.select("user.name").includes([:user, :company])
这会使用正确的左连接执行 1 个查询。并且仍然完全忽略了选择。
在我看来,rails 忽略了包含包含的选择。好的,但是为什么当我将相关模型放入 select 时,它会从发出 3 个查询切换到发出 1 个查询?
请注意,第 1 个查询是我想要的,我只是无法想象这是获取它的正确方法,也无法想象它为什么会起作用,但我不确定如何在一个查询中获取结果 (.joins似乎只使用了我实际上并不想要的 INNER JOIN,当我手动将连接条件指定为 .joins 时,我们正在使用的搜索 gem 会因为它试图重新添加同名的连接而变得异常)。
【问题讨论】:
标签: ruby-on-rails activerecord ruby-on-rails-3