【Ruby】pluckメソッドを使用し、特定のカラムのレコードを配列として取得する

2024/08/08に公開

はじめに

現在Ruby on Railsを使用してアプリを作成しています。
その中で特定のカラムのレコードを配列として取得するのに、pluckメソッドを使用しました。
私自身pluckメソッドを使用することが初めてだったこと、また調べてみるとselectメソッドと比較されることが多いメソッドでした。
今後も使用できるよう自分の中で整理したく、簡単ではありますが記事にまとめました。
参考になりましたら幸いです。

pluckメソッドとは?どんな場面で使用したのか?

現在作成しているアプリの中で、これまでユーザーが投稿したタイトル・内容を総評するようなチャットボット機能を作成しております。
Articleテーブル内のカラムにtitleとbodyのカラムがあり、その取得に際してpluckメソッドを使用しました。
こちらに記載がありますが、基本の形はモデル.pluck(カラム名..)となります。

今回私は下記のように指定しました。

  • app/controllers/users_controller.rb
@article_title = current_user.articles.published.pluck(:title)
@article_body = current_user.articles.published.pluck(:body)

下記はコンソールで確認した内容です。こちらはタイトルですが、配列内にこれまでユーザーが投稿した記事のタイトルが格納されていることが確認できます。
Image from Gyazo

@article_titleは、これまで投稿された全投稿のタイトルを取得しています。
@article_bodyに関しては、view側で@article_body.first, @article_body.second, @article_body.thirdというような形でどの投稿記事内容を取得するかを指定しています。

余談とはなりますが、pluckメソッドで特定のカラムのレコードは取得できましたが、投稿内容は記事の文字数が多いこと・マークダウン記法を採用していることから別の問題が発生しており、まだうまく実装できていません。
この問題は解決できたら、また記事にできたらと思っております。

selectメソッドは?

selectメソッドもpluckメソッド同様、カラムを指定して取得できます。(参照:https://railsdoc.com/page/model_select)

コンソールで確認すると、下記結果が返ってきます。
Image from Gyazo

pluckメソッドとselectメソッドの違い/ なぜpluckメソッドを使用した?

pluckメソッドとselectメソッドの大きな違いのひとつは、それぞれのメソッドが返す帰り値にあると感じました。

  • pluckメソッド: カラムの値だけを配列で返すため、SQLクエリの処理が効率的になる。
  • selectメソッド: ActiveRecordのオブジェクトを返すため、後続のクエリ・メソッドチェーンにActiveRecordの機能を利用することが可能。

今回はtitle・bodyカラムのレコードを取得した後に、ActiveRecordの機能を使って処理を後続させたいわけではなかったのでpluckメソッドを使用しました。

最後に

今回pluckメソッドを使用してみて便利だったので、今後も使用する機会があれば使用したいと思いました。
最後までご覧いただきありがとうございました。

参考

Discussion