ActiveRecord查询返回ActiveRecord:Relation

时间:2017-05-14 05:44:29

标签: ruby activerecord

我回来查询一个ActiveRecord:Realtion,使用另一个查询参数,我按照预期和需要返回正确的数组。

如何在传递bot_client_id的值时获取数组,为什么行为会有所不同?

[20] pry(#<BotResponse>)> e = Event.where.has {(bot_client_id == 'aiaas-1409611358153-user-0147')}
=> #<Event::ActiveRecord_Relation:0x15fe2a8>

[21] pry(#<BotResponse>)> Event.where.has {(status == 'inactive')}.first
=> #<Event:0x00000002ae1d50
 id: 1,
 bot_client_id: "aiaas-1409611358153-user-0147",
 keyword: "testing create event 1 minute from now",
 topic: nil,
 status: "inactive",
 channel: "telegram",
 created_date: 2017-05-06 20:37:24 UTC,
 tickle_expression: nil,
 time_of_day: "1 minute from now",
 next_occurrence: 2017-05-06 20:54:20 UTC,
 time_zone: nil,
 recurring: false>

1 个答案:

答案 0 :(得分:2)

Active Record query interface几乎为每个方法调用返回一个关系。这允许链接方法调用,如Foo.where(bar: true).join(:baz).order(:id)

另一个优点是它不会立即对数据库运行查询,但是第一次实际需要结果时。当您在关系上调用某些方法时,Rails会加载记录,例如eachmapcountto_aload {{1 }}

因此,您的示例之间的重要区别不是firstbot_id,而是您在第二个示例中调用status,但没有方法可以加载来自第一个例子中的数据库。