1
0

Ruby, Ruby on Railsのselectメソッドについて

Last updated at Posted at 2024-06-25

読んで欲しい人

  • selectメソッドがわからない人
  • 過去の自分

動作環境

  • ruby 3.3.0
  • Rails 7.1.3.3

selectとは

  • Enumerableモジュールの一部
  • 文字列、配列、ハッシュに対して検索を行えるメソッド

Enumerableモジュールとは

  • 繰り返し処理を行うためのモジュール

Enumerableモジュールに定義されているメソッドは全てeachを用いて定義されてる。

eachを基盤として、より複雑な操作を簡単に行うための道具箱がEnumerableモジュールという感じ。

モデルに使う時

前提:下記のusersテーブルがあるとする

id name email
1 jojo jojo@example.com
2 dio dio@example.com
3 hoge hoge@example.com

普通に情報を取得すると下記

User.all

# 発行されるSQL
SELECT `users`.* FROM `users`

[ #<Cat id: 1, name: "jojo", email: "jojo@example.com", created_at.......>, 
#<Cat id: 2, name: "dio", email: "dio@example.com", created_at.......>, 
#<Cat id: 3, name: "hoge", email: "hoge@example.com", created_at.......>, 
]

1. selectステートメントを利用する

selectの引数に指定カラムを入れると、指定したカラムのみの配列を取ってくれる

User.select(:name)

# 発行されるSQL
SELECT "users"."name" FROM "users"

[ #<User name: "jojo", id: nil>,
#<User name: "dio", id: nil>,
#<User name: "hoge", id: nil>,
]

2. ブロックを引数を利用して、配列のArray#selectメソッド的に使う

Array#selectメソッドを使用して、データベースから取得したオブジェクトの配列に対して条件を適用する場合

user.id.odd?でtrueのみの要素で配列を作ってくれる

odd?は偶数かどうかを真偽で返してくれる

User.select { |user| user.id.odd? }

# 発行されるSQL
SELECT "users".* FROM "users"

[ #<Cat id: 1, name: "jojo", email: "jojo@example.com", created_at.......>, 
#<Cat id: 3, name: "hoge", email: "hoge@example.com", created_at.......>, 
]

配列に使う時

numbers = [1, 2, 3, 4, 5]

even_numbers = numbers.select { |number| number.even? }
puts even_numbers # => [2, 4]

numbers配列の中身1つ1つをeven?メソッドで確認して、trueのものだけを格納してる

even?は偶数かどうかを真偽で返してくれる

ハッシュに使う時

scores = {
  alice: 85,
  bob: 90,
  charlie: 78,
  diana: 92
}

# スコアが80以上の生徒だけを抽出
high_scorers = scores.select { |name, score| score >= 80 }
puts high_scorers # => {:alice=>85, :bob=>90, :diana=>92}

ハッシュにもいい感じ

学びと感想

  • Railsを触っていて、当然ですがRubyのメソッドがわからないとお話にならないなと学べました
  • 配列やハッシュを用いてデータを活用できれば、Railsでやれることが増えるなと思いました。

参考記事

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0