プログラミング

【Rails】whereの使い方(like・not・orも紹介)

Ruby on Rails whereメソッドの使い方


初心者

railsを始めてみたけどwhereってどう使う?
オブジェクトを検索したい時はどうすればいい?


こんなお悩みに答えます。

記事の信頼性

当サイトの管理者「つげお」は、プログラミング未経験からWeb業界でプログラマー(Ruby on Rails)として6年勤務しています。

Ruby on Railsでは、ActiveRecordという機能によってDB(データベース)内のデータを検索することができます。

ただ、Railsには似たようなメソッドが多いため、「何が違うのか」「どれを使えばいいのか」分かりづらいですよね。

そこで、本記事では、Railsのwhereメソッドについて使い方を解説しています。

whereの使い方

虫眼鏡

whereメソッドは、指定したカラムの値に合致するデータを検索するメソッドです。

以下、Userモデルを例に説明していきます。

whereの基本形

whereメソッドの基本形は「モデル名.where(カラム名: 値)」となります。

検索したいモデルにwhereを繋げて使います。whereの引数(カッコの中の部分)には、検索したいカラムと値を指定しましょう。

 
User.where(age: 20)

上記は「Userテーブルの中でageが20のレコードを検索」という意味になります。
※複数ヒットすれば複数のレコードを返します

複数のデータが帰ってきた場合の並び順は決まっておりませんので、orderをかけてあげるのが良いです。

なお、ヒットするidのレコードが見つからない場合は、ActiveRecord_Relationクラスの空配列を返します。

条件の複数指定(AND検索)

whereの引数には、複数の条件を指定することができます。

 
User.where(age: 20, sex: 'male', payment: true)

上記は「Userテーブルの中でageが20かつsexがmaleかつpaymentがtrueのレコードを検索」という意味になります。

LIKEであいまい検索

Stringのカラムを指定する場合、指定した文字列を含むレコードを検索することができます。

 
User.where('email like ?', '%@gmail.com%')

上記は「Userテーブルの中でemailに@gmail.comが含まれるレコードを検索」という意味になります。

ORでいずれかを含む検索

whereの後に.orをつけることで、条件1または条件2に該当のような検索ができます。

※Rails5からの機能です

 
User.where(family_name: '山田').or(User.where(first_name: '太郎'))

上記は「Userテーブルの中でfamily_nameが山田またはfirst_nameが太郎のレコードを検索」という意味になります。

NOTで否定検索

whereの後に.notをつけることで、条件に当てはまらないレコードを返すようになります。

 
User.where.not(status: 'reject')

上記は「Userテーブルの中でstatusがreject以外のレコードを検索」という意味になります。

whereの使い方まとめ

END 終わり

whereソッドはデータベースからレコードを検索する機能です。

whereには下記のような検索方法があります。

  • 基本の条件指定【モデル.where(カラム名: 値)】
  • AND検索【モデル.where(カラム名1: 値1, カラム名2: 値2)】
  • あいまい検索【モデル.where('カラム名 like ?', %値%)】
  • 否定検索【モデル.where.not(カラム名: 値)】

whereはレコードを複数返しますが、その順序はランダムなので、思わぬ動作不良を起こすことがよくあります。

whereを使う際は、orderメソッドでしっかり整列してあげましょうね。


つげお

whereはRailsアプリに必須の機能です。使い方をマスターしましょう!


whereと同様にレコードを検索する「findメソッド」「find_byメソッド」はこちらの記事にまとめています。

-プログラミング
-

Copyright© つげコード , 2020 All Rights Reserved.