如何在某个点之前不评估查询?(有关系对象检查)



考虑一下:

1] pry(main)> User.joins(:tasks)
=> #<User::ActiveRecord_Relation:0x3fe8923d31cc>
[2] pry(main)> User.where(state: 'undefined')
  User Load (6.8ms)  SELECT "users".* FROM "users"  WHERE "users"."state" = 'undefined'
=> []

所以在第一种情况下,它返回关系对象,什么是"懒惰"-我可以应用其他方法(如.where),它不触发查询本身。

但是where做相反的事情——它立即进行查询。但如果我想在这里也有活动的记录关系,所以我可以链其他范围到它,然后求值查询?

我想在单独的方法中查询,然后应用于此方法的返回find_each

使用where(...)返回ActiveRecord_Relation

试着在行尾调用.class,如下所示:User.where(state: 'undefined').class,看看你得到了什么

您所看到的只是控制台在关系上调用.inspect之类的东西。

在控制台之外,ActiveRecord Relations将惰性地求值,直到绝对必要时才调用DB。

请参阅来自Odin项目的这篇文章,以获得更完整的解释:

https://www.theodinproject.com/courses/ruby-on-rails/lessons/active-record-queries

最新更新