Ruby on rails x=User.all是否创建哈希?我如何穿越它?
假设我有一个用户表和一个消息表,它们有一个has\u many belient\u to关系。我想找到id:对于名为“Bob”的用户,然后提取其中一个id的消息历史记录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…
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的编辑!就是这样!谢谢你,瓦斯费德