Help us understand the problem. What is going on with this article?

pluckメソッドが便利な件について

今回は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メソッドに関しての投稿でした。

【参考記事】
https://railsguides.jp/active_record_querying.html

k-o-u
エンジニア2年生です。Rails/Vue
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした