今回はカラム情報を複数取得することができるメソッド、pluckメソッドについて解説したいと思います。selectメソッドとmapメソッドを併用して複数のカラム情報を取得することもできますが、pluckメソッドを使用するとより簡単に記述できるため、ぜひ使って欲しいメソッドの1つです。
pluckメソッドとは
pluckメソッドはカラム情報を複数取得することができるメソッドです。
pluckメソッドについて、Railsガイドには以下のように記されています。
pluckは、1つのモデルで使用されているテーブルからカラム (1つでも複数でも可) を取得するクエリを送信するのに使用できます。引数としてカラム名のリストを与えると、指定したカラムの値の配列を、対応するデータ型で返します。
使い方
では実際にpluckメソッドの使い方を見ていきましょう。
今回はpostsテーブルにtitleカラムとuser_idカラムがあると仮定します。

まずはpostsテーブルからtitleの情報を取得してみます。
以下のように記載することで、titleの情報を全て取得することができます。
% rails c
pry(main)> Post.pluck(:title)
=> ["テスト投稿", "aaa", "aaaa"]
続いて、idとtitleとuser_idの3つの情報を取得してみます。
以下のように記載することで、idとtitleとuser_idの情報を全て取得することができます。
% rails c
pry(main)> Post.pluck(:id, :title, :user_id)
=> [[1, "テスト投稿", 1], [2, "aaa", 1], [3, "aaaa", 1]]
これは同様に、selectメソッドとmapメソッドを併用して記述することもできます。
% rails c
pry(main)> Post.select(:id, :title, :user_id).map { |c| [c.id, c.title, c.user_id] }
=> [[1, "テスト投稿", 1], [2, "aaa", 1], [3, "aaaa", 1]]
注意点
pluckメソッドはとても便利なメソッドですが、1点注意しなければならないことがあります。
それは、pluckメソッドの後ろにメソッドチェーンすることはできないということです。
例を見てみましょう。
以下のように記述してしまうと配列に対してlimitメソッドがundefinedになってしまいます。
% rails c
pry(main)> Post.pluck(:title).limit(1)
NoMethodError: undefined method `limit' for ["テスト投稿", "aaa", "aaaa"]:Array
from (pry):1:in `__pry__'
この場合、pluckメソッドの前でメソッドチェーンを行うことで解決することができます。
% rails c
pry(main)> Post.limit(1).pluck(:title)
=> ["テスト投稿"]
参考
Railsガイド:https://railsguides.jp/active_record_querying.html
今回はカラム情報を複数取得することができるメソッド、pluckメソッドについて解説しました。pluckメソッドは、大規模なクエリや使用頻度の高いクエリで使用するとパフォーマンスが向上するので積極的に使いたいメソッドの1つですね。