我想连接两个表并返回所有列,而不仅仅是与模型关联的列。Rails 3从连接中返回所有列
我有类似的东西看起来像这样:
Comment.joins(:user).select("*")
的SQL看起来不错,不过,它只返回的意见,并没有与之相关的用户信息的。
如何检索*
而不仅仅是comments.*
?
我想连接两个表并返回所有列,而不仅仅是与模型关联的列。Rails 3从连接中返回所有列
我有类似的东西看起来像这样:
Comment.joins(:user).select("*")
的SQL看起来不错,不过,它只返回的意见,并没有与之相关的用户信息的。
如何检索*
而不仅仅是comments.*
?
什么
comments = Comment.includes(:user).all
现在comments
将是一个数组,所以你必须遍历它来查看所有用户。
#won't work
comments.user
#should work
comments[0].user
comments.each do |comment|
puts comment.user.name #or whatever
end
Comment.select( '*'),包括(:用户)
这应该工作:
comments = Comment.joins(:user).includes(:user)
但在这里就是我认为正在发生的事情,如果你正在查看控制台输出窗户,我认为控制台输出只反映/检查返回的根级别的对象。
我刚刚做了一个实验,我执行上面的代码。终端输出记录它提取了评论,但没有提及关联的用户。接下来,我关闭数据库,以便不能对数据库执行第二个查询,然后询问关联的用户,例如,
comments.user
控制台输出的用户,这证明它已经被即时加载,因为没有数据库连接进行了尝试。
有趣。我想知道同样的事情。虽然查询的缓存可能会让人困惑,但您也可能会注意到执行`comments.user`时查询是否被触发。 – wuliwong 2013-06-04 14:52:04
瑞安贝茨在这个问题上有很好的教程。
http://railscasts.com/episodes/22-eager-loading-revised?autoplay=true
右键 - 我不知道你是否担心SQL或刚开回数据。在这种情况下,您不必返回数据库就可以同时获得评论和用户。 – Cory 2010-11-27 15:42:13
只是做Comment.select(“评论。*,用户。*”) – Cory 2010-11-27 15:42:45