小编Tim*_*lin的帖子

ActiveRecord:包括 - 如何使用已加载关联的地图?

我有一个小型rails应用程序,我正在尝试获取一些订单统计信息.所以我有一个Admin模型和一个Order模型,具有一对多的关联.

class Admin < ActiveRecord::Base
  attr_accessible :name
  has_many :orders
class Order < ActiveRecord::Base
  attr_accessible :operation
  belongs_to :admin
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用此查询获取特定订单:

admins = Admin.where(...).includes(:orders).where('orders.operation = ?', 'new gifts!')
Run Code Online (Sandbox Code Playgroud)

这与预期一样有效.但是当我尝试使用这样的地图制作json时

admins.map {|a| [a.name, a.orders.pluck(:operation)]}
Run Code Online (Sandbox Code Playgroud)

Rails使用新查询再次加载订单,忽略已加载的对象.

(5.6ms)  SELECT "orders"."operation" FROM "orders" WHERE "orders"."admin_id" = 26
(6.8ms)  SELECT "orders"."operation" FROM "orders" WHERE "orders"."admin_id" = 24
(2.9ms)  SELECT "orders"."operation" FROM "orders" WHERE "orders"."admin_id" = 30
(3.3ms)  SELECT "orders"."operation" FROM "orders" WHERE "orders"."admin_id" = 29
(4.8ms)  SELECT "orders"."operation" FROM "orders" WHERE "orders"."admin_id" = 27
(3.3ms)  SELECT "orders"."operation" FROM …
Run Code Online (Sandbox Code Playgroud)

ruby activerecord ruby-on-rails ruby-on-rails-3.2 rails-activerecord

4
推荐指数
1
解决办法
5318
查看次数