Ruby on rails x=User.all是否创建哈希?我如何穿越它?

Ruby on rails x=User.all是否创建哈希?我如何穿越它?,ruby-on-rails,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby On Rails 4,Activerecord,假设我有一个用户表和一个消息表,它们有一个has\u many belient\u to关系。我想找到id:对于名为“Bob”的用户,然后提取其中一个id的消息历史记录 x = User.where(name: "Bob") 这是否会在变量x中创建一个散列,其中包含名为Bob的用户的所有结果?当我运行x时,控制台中的结果看起来确实像一个散列。要包含与所有BOB相关的消息,我想我会: x = User.where(name: "Bob").includes(:messages) 现在我有了x…

假设我有一个用户表和一个消息表,它们有一个has\u many belient\u to关系。我想找到id:对于名为“Bob”的用户,然后提取其中一个id的消息历史记录

x = User.where(name: "Bob")
这是否会在变量x中创建一个散列,其中包含名为Bob的用户的所有结果?当我运行x时,控制台中的结果看起来确实像一个散列。要包含与所有BOB相关的消息,我想我会:

x = User.where(name: "Bob").includes(:messages)
现在我有了x…我如何找到那些叫鲍勃的人的id?我不想再次查询数据库,我想通过变量来完成这一切,这可能吗

然后,我想获取表中第一个id(第一个Bob)的第一条消息。这可以通过变量来实现吗,还是在获得第一个id后必须返回DB


谢谢大家的帮助

这样就可以了。如导轨指南中所述。第13.2节

x = Message.includes(:users).where(users: { name: "Bob"})
然后,要获得第一条消息,只需继续。首先在查询的末尾

x = Message.includes(:users).where(users: { name: "Bob"}).first

大多数ActiveRecord查询返回一个
关系


您可以调用
x=x.to_a
让rails执行实际的查询(将有两个SQL查询-一个用于用户,一个用于消息),然后遍历结果数组。

您需要从消息而不是用户进行查询。联接(内部联接)和包含(左侧外部联接)可用于即时加载,如您的问题中所述,或用于跨多个表进行查询

Message.joins(:user).where('user.name = "bob"')

感谢您对@misha的编辑!就是这样!谢谢你,瓦斯费德