我的订单模型中有以下作用域:
scope :trial_almost_up, lambda { where :date_finished => 27.days.ago.midnight..27.days.ago.end_of_day }
每个订单都与一个用户相关联。因此,如果您运行Order.trial_almost_up并获取订单数组并运行以下命令:
o = Order.trial_almost_up
o.collect &:user
集合为绑定到用户的每个订单运行单独的 SQL 语句。
User Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 11244 LIMIT 1
User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1970 LIMIT 1
有没有办法把它合并成一个电话?
你可以
这样做。我不知道是否有更好的方法,但这是我目前唯一能想到的方法。
User.includes(:orders).where("orders.date_finished" => 27.days.ago.midnight..27.days.ago.end_of_day)
让我知道它是否有效,如果我找到更好的东西,我会编辑它