如果我有一个User表和House表,我这样做:
users = User.where(status: 3)
homes = Home.joins(:user).merge(users)
在第一次分配时,我是否已经执行了查询?或者等到第二个执行查询?或者当你真正试图访问任何这些结果时它会这样做? Rails如何设法知道何时执行查询?
答案 0 :(得分:0)
where
方法返回一个ActiveRecord::Relation
对象,并且该对象本身不会发出数据库查询。您使用此对象的地方很重要。 join
方法也延迟使用关联表加载数据库查询,但只将Home
表加载到内存中,因为不需要关联的User
表。之后你有merge
,merge
方法的作用是在连接模型上使用命名范围的简单方法。像
class Home < ActiveRecord::Base
has_many :users
end
class User < ActiveRecord::Base
belongs_to :home
scope :available, ->{ where(available: true) }
end