6

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

我有类似的东西:

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

SQL 看起来不错,但它仍然只返回评论,没有任何与之关联的用户信息。

我怎样才能检索*而不仅仅是comments.*

4

4 回答 4

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
于 2010-11-28T06:00:47.793 回答
2

这应该有效:

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

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

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

comments.user

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

于 2010-11-27T16:21:03.377 回答
1

Comment.select('*').includes(:user)

于 2010-11-27T15:20:44.447 回答
1

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

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

于 2013-10-09T17:42:24.457 回答