今回はpluckメソッドが便利だったので自分なりにまとめてみました。
##pluckメソッドとは・・・
公式ドキュメントでは以下のように記載されています。
pluckは、1つのモデルで使用されているテーブルからカラム (1つでも複数でも可) を取得するクエリを送信するのに使用できます。引数としてカラム名のリストを与えると、指定したカラムの値の配列を、対応するデータ型で返します。
ふむふむ。わかったようなわからないような・・・
##使い方は?
では、実際のコードを見ていきます。
Productモデルがあったとして、nameカラムの中身を確認したい場合は、
Product.pluck(:name)
=> ["Ruby on Rails Tote",
"Ruby on Rails Bag",
"Ruby on Rails Baseball Jersey",
"Ruby on Rails Jr. Spaghetti",
"Ruby on Rails Ringer T-Shirt",
"Ruby Baseball Jersey",
"Apache Baseball Jersey",
"Ruby on Rails Mug",
"Ruby on Rails Stein"]
といったようにProductモデル内のnameカラムを一覧表示することができます。
Product.pluck(:id,:name)
=> [[1, "Ruby on Rails Tote"],
[2, "Ruby on Rails Bag"],
[3, "Ruby on Rails Baseball Jersey"],
[4, "Ruby on Rails Jr. Spaghetti"],
[5, "Ruby on Rails Ringer T-Shirt"],
[6, "Ruby Baseball Jersey"],
[7, "Apache Baseball Jersey"],
[8, "Ruby on Rails Mug"],
[9, "Ruby on Rails Stein"]]
このように第二引数を設定することも可能です。
便利ですね〜
Product.select(:id, :name).map { |c| [c.id, c.name] }
また上記のselectメソッド、mapメソッドを利用したコードと上記のコードは同等の意味になるので、pluckメソッドを上手く活用することでコードをシンプルに書くことができますね。
##注意点
ただ、pluckメソッドには注意点もあります。
Product.pluck(:name).limit(1)
=> NoMethodError: undefined method `limit'
pluckメソッドは最初のようなケースではエラーが出てしまいます。
なぜなら、pluckメソッドはクエリを直接トリガするので、その後ろに他のスコープをチェインすることはできないからです。
Product.limit(1).pluck(:name)
=> ["Ruby on Rails Tote"]
ただし上記のように、構成済みのスコープに対してpluckの前に置くことはできます。
以上、簡単ではありますがpluckメソッドに関しての投稿でした。