こんにちは! フリーエンジニアの長瀬です。
みなさんはpluckを使っていますか?
pluckを使えば、高速かつ簡潔にカラムの値をデータベースから取り出せます。
この記事ではpluckの使い方について
・pluckとは
・pluckにて複数列を取得する方法
という基本的な内容から、
・pluckにて取得結果の表示をカスタマイズする方法
といった応用的な内容についても解説していきます。
pluckとは
pluckはRailsでデータベースからデータを取り出すメソッドの一つです。
pluckの構文はとてもシンプルで直感的に使いやすいものになっています。
モデル.pluck(カラム名)
このように、モデルとカラム名を指定するだけで、簡単にデータを取り出せます。
また、pluckではデータは配列として取り出されます。
指定したカラムが2つ以上の場合は、配列の配列になります。
pluckにて複数列を取得する方法
それでは実際にpluckを使っていきましょう。
今回使用するモデルとコントローラとビューを作成するためにコマンドプロンプトに以下のコードを入力してください。
[モデルとコントローラとビューを作成し、マイグレーションファイルの内容を反映する]
rails g model User name:string prefecture:string rails g controller Example test rake db:migrate
これで今回使用する使用するモデルとコントローラとビューを作成できました。
それではデータベースにpluckメソッドを使って取り出すためのデータを入れていきましょう。
rails consoleでコンソールを起動した後、以下のコードを入力してください。
[今回使用するデータをUserに取り込む]
User.create(name:"長瀬来",prefecture:"北海道") User.create(name:"新渡戸春樹",prefecture:"東京都") User.create(name:"飯島俊介",prefecture:"岩手県") User.create(name:"滝沢由美子",prefecture:"京都府") User.create(name:"新川豊",prefecture:"福井県")
これでデータが入りました。
それでは、pluckを使用して、データを取り出してみましょう。
rails consoleでコンソールを起動した後、以下のコードを入力してください。
[pluckメソッドを使って,nameのカラムの値を取り出す]
User.pluck(:name)
[実行結果]
(0.5ms) SELECT "users"."name" FROM "users" => ["長瀬来", "新渡戸春樹", "飯島俊介", "滝沢由美子", "新川豊"]
カラムを1つだけ指定しているので、配列にてnameの値が表示されます。
次はカラムを2つ指定してみましょう。
[pluckメソッドを使って,nameとprefectureのカラムの値を取り出す]
User.pluck(:name,:prefecture)
[実行結果]
(0.4ms) SELECT "users"."name", "users"."prefecture" FROM "users" => [["長瀬来", "北海道"], ["新渡戸春樹", "東京都"], ["飯島俊介", "岩手県"], ["滝沢由美子", "京都府"], ["新川豊", "福井県"]]
このように、配列の配列としてnameとprefectureのカラムの内容が取り出されていることが確認できます。
pluckにて取得結果の表示をカスタマイズする方法
それでは、pluckで取り出した値をうまくビューに表示できるようにしてみます。
pluckでは配列として取り出されるので、ビューで表示する際には不都合です。
なので、joinメソッドを使って、表示を整えていきましょう。
app/views/example/test.html.erbに以下の既存のコードをすべて削除して以下のコードを入力してください。
[app/views/example/test.html.erbに入力する内容]
名前一覧:<%= User.pluck(:name) %>
続いて、結果を確認するためにコマンドプロンプトにrails sと入力して、サーバーを起動してください。
そして、test.html.erbのルーティングを確認するためにapp/config/route.rbを開いてください。
[app/config/route.rbの内容]
get 'example/test'
となっていることが確認できます。
以下のURLにアクセスして、test.html.erbを開いてください。
http://localhost:3000/example/test(補足http://localhost:3000の箇所は各自の開発環境により読み替えてください。)
[実行結果]
このように、そのままだと配列で取り出したまま表示されるので不都合です。
なので、joinメソッドをチェーンさせて
[app/views/example/test.html.erbに入力する内容]
名前一覧:<%= User.pluck(:name) %>
のコードを
[新たにapp/views/example/test.html.erbに入力する内容]
名前一覧:<%= User.pluck(:name).join(" ") %>
に書き換えてください。
[実行結果]
このように、join(“任意の区切り文字”)で指定した通り、半角の空白で区切った名前一覧が表示されて表示の問題を解決できました。
まとめ
いかがでしたでしょうか?
この記事では、pluckの使い方を解説しました。
pluckを使えば、手軽にカラムの値を取り出せて、便利です。
また、pluckを使ってビューにカラムの値を表示させたいときにはjoinメソッドを使えば、綺麗に表示できます。
もしpluckの使い方について忘れてしまったらこの記事を確認してくださいね!