考虑一下:
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