有谁能解释一下?
Project.includes([:user, :company])
Run Code Online (Sandbox Code Playgroud)
这将执行3个查询,一个用于获取项目,一个用于获取这些项目的用户,另一个用于获取公司.
Project.select("name").includes([:user, :company])
Run Code Online (Sandbox Code Playgroud)
这将执行3个查询,并完全忽略选择位.
Project.select("user.name").includes([:user, :company])
Run Code Online (Sandbox Code Playgroud)
这将使用正确的左连接执行1个查询.并且仍然完全忽略了选择.
在我看来,rails忽略带有包含的select.好的,但为什么当我在select中放入相关模型时,它会从发出3个查询切换到发出1个查询?
请注意,1查询是我想要的,我无法想象这是获得它的正确方法,也不是它的工作原理,但我不确定如何在一个查询中获得结果(.joins似乎只是使用我实际上并不想要的INNER JOIN,当我手动指定连接条件为.joins搜索gem时,我们正在尝试重新添加具有相同名称的连接.
我一直在寻找这方面的提示,到目前为止还没有真正的运气.使用mysql2 gem,尝试执行返回多个结果集的存储过程使我无法返回此上下文错误中的结果.我发现有人建议使用mysql gem(我无法找到两者之间有什么不同以及切换时可能遇到的内容的解释),并且我已经有了更多的进展.
这是我到目前为止所拥有的:
>> db = ActiveRecord::Base.connection.raw_connection
=> #<Mysql:0x1056ae3d8>
>> ActiveRecord::Base.connection.select_all("CALL p_rpt_test('', '');")
=> [{"Header"=>"Client,Project,Type,Due Date,Assigned To"}]
>> db.more_results?
=> true
>> db.next_result
Mysql::Error: Commands out of sync; you can't run this command now
from (irb):3:in `next_result'
from (irb):3
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何使用mysql2或mysql宝石来实现这一点?该应用程序正在运行rails 3.0.1.