Posted at

pluckが常に最速とは限らない

More than 5 years have passed since last update.

属性としてアクセス可能にした関連テーブルはキャッシュされるが、pluckを使うとそのキャッシュが使用されない。

class Member < ActiveRecord::Base

accepts_nested_attributes_for :groups
# で
m = Member.first # membersからSELECT
m.groups # members inner join groups なクエリの結果がキャッシュされる
m.groups.map{|g| g.id} # 上記の結果からidの配列が作成される
m.groups.pluck(:id) # クエリが再発行される