Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
153
Help us understand the problem. What is going on with this article?
@k-o-u

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

More than 1 year has passed since last update.

今回は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

153
Help us understand the problem. What is going on with this article?
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
k-o-u
エンジニア2年生です。Rails/Vue

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
153
Help us understand the problem. What is going on with this article?