假设我有一个User表和一个Messages表,它们有一个has_many belongs_to关系。我想找到id:对于名字为“Bob”的用户,然后拉出其中一个id的消息历史记录。
Cloudera Manager
这是否会在变量x中创建一个哈希值,其中包含名称为Bob的用户的所有结果?当我运行x时,控制台中的结果看起来像哈希。要包含与所有Bobs相关的消息,我想我会这样做:
x = User.where(name: "Bob")
现在我有了x ...如何找到名字叫鲍勃的人的身份证?我不想再次查询数据库,我想通过变量完成所有操作,这可能吗?
然后我想在我的表中获得第一个id(第一个Bob)的第一条消息。可以通过变量完成,或者一旦我有第一个id,我是否必须返回DB?
感谢所有帮助男士和女士们!
答案 0 :(得分:1)
这样做。如导轨指南中所述。 http://guides.rubyonrails.org/active_record_querying.html第13.2节
x = Message.includes(:users).where(users: { name: "Bob"})
然后在查询结束时获取第一条消息.first。
x = Message.includes(:users).where(users: { name: "Bob"}).first
答案 1 :(得分:1)
大多数ActiveRecord查询返回Relation
。
您可以调用x = x.to_a
使rails执行实际查询(将有2个SQL查询 - 一个用于用户,一个用于消息),然后遍历生成的数组。
答案 2 :(得分:0)
您需要从消息而不是用户查询。连接(内连接)和包含(左外连接)可用于急切加载,如您的问题,或跨多个表进行查询。
Message.joins(:user).where('user.name = "bob"')