【Rails】whereメソッドを徹底解説!2019年03月13日Railswhereメソッドとは?whereメソッドとはテーブル内の条件に一致したレコードを配列の形で取得することができるメソッドです。whereメソッドの使い方リンクをコピーしましたwhereメソッドは下記のように記述します。"太郎"")上の例だとnameカラムの中から太郎という文字が入っているレコードを全て取得します。"条件")という風に書くこともできます。下の2つの例はどちらも同じになります。"条件")また下記のように書くこともできます。idが5以上のレコードが全て取得できる「?」はプレースホルダーと呼ばれ、第二引数で指定した値が置き換えられます。上の例の「5」の部分には変数が入ることが多いです。"条件")」のような書き方はできません。LIKE句リンクをコピーしましたLIKE句は、あいまいな文字列の検索をするときに使います。whereメソッドと一緒に使用します。」を文字列と組み合わせた値として記述します。それぞれ下記の意味を持ちます。任意の1文字これだけだとわかりづらいので例を見てみましょう。「%」は任意の複数文字なので「あ%」と書くと「あ」以降はどんな文字も複数含むので先頭に「あ」がついた文字列は全て含まれることになります。「%あ」と書くと末尾が「あ」で終わる全ての文字列が含まれます。」は任意の1文字を示します。「あ_」とすると「あ」から始まる2文字の単語になります。「_あ」とすると「あ」で終わる2文字の単語になります。like句は検索機能を実装したい時などに使います。"%あ%")上の例の場合、検索したい文字列を「%あ%」と指定しました。ここでは前後に「%」をつけたので文字列の中に「あ」が含まれればどんな文字列も当てはまることになります。usersテーブルのnameカラムの中の「あ」が含まれるレコード全てが取得できるというわけです。実際にアプリ内で使ってみようリンクをコピーしましたそれではrailsのファイルを使って実際にwhereメソッドを使ってみましょう。下記のコマンドを順に実行してみましょう。2.3.1)に書き換えてください。2.3.1)に書き換えてください。db:seed環境構築が完了しました。sコマンドで起動しましょう。3000と入力して下記のような画面が出てくれば環境構築完了です!アプリ内でコードを書いてみようリンクをコピーしましたそれでは実際にコードを書いていきましょう。programan_dojo/app/controllers/main_controller.rb上記のファイルを開けてください。endend上記の用に記載されていると思います。それを下記のように書き換えてください。これはidが2より大きいレコードを全て取得するという意味を表します。実際にビューで確認してみましょう。このようにidが3以降のレコードだけ取得できたのが確認できますね。次に体重が50.0kg以上のユーザーのみ取得してみましょう。体重が保存されているカラムは「weight」になります。50.0」に定義してあげればよいですね。それではビューで確認してみましょう。このようにしっかりと体重が50.0kg以上のユーザーだけ表示されます。「?」を使ってみようリンクをコピーしましたでは次にプレースホルダーの「?」を使った記述をしてみましょう。マイページを開いたときに自分だけでなく自分より年上のユーザーのデータも表示させてみます。programan_dojo/app/controllers/users_controller.rb`を開きましょう。4行目に下記のコードを追記してください。endend「?」部分にはuser.ageが入ります。マイページ(ユーザー自分自身の詳細ページ)での表示を仮定しているので、user.ageにはユーザー自身の年齢が入リます。このように記述することにより自分より年上のユーザー全ての情報を自分のデータと共に表示させることができます。試しにアドレスバーにhttp://localhost:3000/users/1と入力してみましょう。ユーザーidが1の年齢は25歳なので自分のレコードの他に25歳以上のユーザー全てのレコードが取得できているのがわかります。次にアドレス末尾のユーザーidを2に変更して、ビューを表示させてみましょう。idが2であるprograman_fatherは登録がしてあるユーザーの中では最高齢なので、自分以外のユーザーは表示されていないことが確認できたと思います。このように変数を使うと状況に応じた検索ができるので非常に便利です。検索機能を実装してみようリンクをコピーしましたそれでは次にwhereメソッドとLIKE句を使って検索機能を実装してみましょう。Main_controllerを下記のように編集してください。endend今回は検索したい文字列に「%sister%」と定義しました。これでnameカラムに「sister」という文字が含まれているレコードは全て取得することができます。それではビューで確認をしてみましょう。このようにnameカラムに「sister」が含まれるレコード全てが取得できました。実際に検索機能を使うときは検索フォームで投稿したキーワードがparamsに入ってこのデータを取り出すアクションに送られるので、検索したい文字列には「%#{params[:keyword]}%」みたいな記述が入ります。皆さんも「sister」の部分を色々と変えて検索結果を確認してみてください。まとめwhereメソッドはテーブル内の条件に一致したレコードを配列の形で取得することができるメソッドです。findメソッドとは異なり、複数のレコードを取得することができます。検索機能を実装したりするときに使用します。