記事の概要
Railsアプリでデータを取扱っていると、テーブルから特定のカラムデータだけを配列にして抽出したい、抽出した配列データを加工して新しい配列にしたい、といった場面に逢います。そうしたときに便利なpluckメソッド、mapメソッドを試してみました。
1. pluckメソッド
2. mapメソッド
1. pluckメソッド
1つのモデルで使用されているテーブルについて、引数に指定したカラムの値を配列で返すメソッド。カラムの指定は一つでも複数でも可。
今、下表のような、出品された家電製品のテーブルがあるとする(Itemモデルのitemsテーブル)。
pluckメソッドを使ってみると、下のように配列が帰ってくる。
names = Item.pluck(:item_name) # 引数にカラムを一つ指定
# => ["掃除機", "冷蔵庫", "空気清浄機", "扇風機", "アイロン", "洗濯機", "電子レンジ", "プリンター", "ヒーター"]
nameprices = Item.pluck(:item_name,:price) # 引数にカラムを二つ指定
# => [["掃除機", 5000], ["冷蔵庫", 20000], ["空気清浄機", 10000], ["扇風機", 1000], ["アイロン", 3000], ["洗濯機", 9000], ["電子レンジ", 2000], ["プリンター", 6000], ["ヒーター", 4000]]
pluckメソッドに引数を渡さない場合は、全てのカラムのデータが二次元配列に格納されて返ってくる。
2. mapメソッド
配列の各要素に対して、ブロックを評価した後に新しい配列にして返してくれる。
例として、mapメソッドを使って、上記のitemsテーブルについて全品10%割引を適用させてみる。
prices = Item.pluck(:price)
# => [5000, 20000, 10000, 1000, 3000, 9000, 2000, 6000, 4000]
discounted_prices = prices.map{|n|n*0.9}
# => [4500.0, 18000.0, 9000.0, 900.0, 2700.0, 8100.0, 1800.0, 5400.0, 3600.0]
新たな配列に格納されて返ってきた。