Rails 3/Ruby 1.9.3 working with Array#collect



我的订单模型中有以下作用域:

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)

让我知道它是否有效,如果我找到更好的东西,我会编辑它

最新更新