我有一個小的rails應用程序,我試圖獲得一些訂單統計。 所以我有一個管理模型和一個訂單模型,一對多關聯。ActiveRecord:包括 - 如何使用加載關聯的地圖?
class Admin < ActiveRecord::Base
attr_accessible :name
has_many :orders
class Order < ActiveRecord::Base
attr_accessible :operation
belongs_to :admin
我試圖用這個查詢以獲得特異性目的訂單:
admins = Admin.where(...).includes(:orders).where('orders.operation = ?', 'new gifts!')
按預期工作而已。但是當我嘗試使用這樣的地圖製作json時,使用新查詢再次加載訂單,而忽略已加載的對象。
(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 "orders" WHERE "orders"."admin_id" = 28
(5.1ms) SELECT "orders"."operation" FROM "orders" WHERE "orders"."admin_id" = 25
當我嘗試使用 循環,而不是地圖,它的作品,因爲它應該:
admins.each do |a|
p a.orders.pluck(:operation)
end
這個代碼不加載所有的訂單,而且只打印那些在第一個查詢加載。 使用map可以得到相同的結果嗎?使用循環代替map的缺點是什麼?
什麼是您的Ruby和Rails版本? – tihom
在使用關聯條件時,我最好使用Ruby 1.9.3和Rails 3.2 –
作爲一般規則,最好使用'joins'。看到這[回答](http://stackoverflow.com/questions/14470027/activerecord-cant-use-pluck-after-where-clause-with-eager-loaded-associati)。雖然問題依然存在,爲什麼它在'each'而不是'map'中工作, – tihom