Rails 3从Join中返回所有列

时间:2010-11-27 15:03:41

标签: ruby-on-rails join arel

我正在尝试连接两个表并返回所有列,而不仅仅是与模型相关的列。

我有类似的东西:

Comment.joins(:user).select("*")

SQL看起来很好,但是,它只返回注释而不返回与之关联的用户信息。

如何检索*而不只是comments.*

4 个答案:

答案 0 :(得分:8)

怎么样?
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

答案 1 :(得分:2)

这应该有效:

comments = Comment.joins(:user).includes(:user)

但这就是我认为正在发生的事情,如果您在控制台窗口中查看输出,我认为控制台输出仅反映/检查返回的根级别对象。

我刚做了一个实验,我执行了上面的代码。终端输出记录了它获取了注释但未提及相关用户。接下来,我关闭数据库,以便无法对数据库执行第二个查询,然后询问相关用户,例如。

comments.user

控制台输出用户,这证明它已经被急切加载,因为没有尝试数据库连接。

答案 2 :(得分:1)

Comment.select( '*')包括:(:用户)

答案 3 :(得分:1)

Ryan Bates在这个主题上有很好的教程。

http://railscasts.com/episodes/22-eager-loading-revised?autoplay=true