No.1のCodeCampが運営するプログラミング未経験の方のための学習メディアですCodeCampとは?(受講生体験記)「エンジニアは女性のキャリアとして魅力的」未経験からの転職体験記リモートワーク×多拠点居住の新しい生き方を実現する。前項までに、Modelを利用したCRUDの実装を行いました。ユーザー一覧ページユーザーの詳細情報ページユーザー登録ページユーザー情報編集ページ上記4つのページを作成してきましたが、今回はユーザー一覧ページに、ユーザーを検索する機能を追加します。ユーザーの検索には下記の機能を実装します。仕様としては、ユーザー名はテキスト形式で記入し、部分一致検索(完全一致ではない)で行い、性別はプルダウンによる選択形式で行うようにします。実装の前に下記のURLからユーザー情報を10名分ほど登録しておくと、以後作業しやすくなります。http://xxxxx.c9users.io:8080/users/new※xxxxxの部分は環境により異なります。それでは検索フォームを実装していきますので、app/views/users/index.html.erbを開き、下記のコードを追記して下さい。%></div>以前、ユーザーの登録や編集の際に、form_forメソッドを使用してフォームを作成しましたが、今回はform_tagメソッドを使用してフォームを作成します。form_forとform_tagの使い分けとしては、form_forはModelに基づく場合に使用します(主に更新や新規作成の場合)。form_tagはModelに基づかない場合に使用します(主に検索)。users_pathと指定しているので検索ボタンを押下し、サーバーへリクエストした際にはindexというActionが実行されることになります。label_tagメソッドは、その名の通り入力欄にラベルを付けるために使用します。性別の検索は選択形式で行いたいので、今回はselect_tagメソッドを使用してセレクトボックス作成します。select_tagメソッドの使用方法は少しややこしいです。第1引数はname属性を表し、第2引数でoptions_for_selectメソッドを使用することで、選択する内容を指定します。User.gendersというのはUserというModelに定義されたgenderというenum(列挙型)のキーと値を全て配列で取得するという内容です。enumの値を全て取得する場合は、定義したenum名の複数形にします。今回の例だと、genderというenum名なのでgendersになります。}end上記のコードが現状のUserというModelの状態ですが、genderという名前のついたenumが定義されているのがわかります。User.gendersと記述することで、unknown,male,female,otherとそれぞれの値が取得できます。include_blankをtrueと指定することで初期値がブランクになります。今回は、検索をする際に性別で絞らないケースが考えられるのでブランク値を許容する形にします。逆に、性別の入力を必須にしたい場合はinclude_blankをfalseにする、もしくはinclude_blankを記述しないようにしましょう。ブラウザで確認すると下の図のようになります。続いて、検索条件に応じた処理を実装していきます。app/models/user.rbを開いてください。}end現状、上記の記述になっています。今回、ユーザーの検索(絞り込み)を行うので、下記のコードを記述します。gender)}上記コードの意味としては、コメントでも記述していますが、絞り込みを行う処理になります。RailsのModelの機能である、scopeというものです。scopeは少し見慣れない書き方をしますが、get_by_nameやget_by_genderがscope名で、nameやgenderが引数です。{}括弧の中が処理に当たる部分なのですが、whereメソッドを使用してnameまたはgenderで絞り込みを行っています。get_by_nameの方では、namelike?としていますが、likeはあいまい検索(部分一致検索)を表しており、?の部分は、第2引数により置換されます。フォームに田中と入力されていた場合、namelike‘%田中%’となります。%の部分については下記の表を参照して下さい。田中さん中田さん野中さん植田さん2つのscopeをapp/models/user.rbに追記すると下記になります。gender)}end最後に、Actionを修正します。app/controllers/users_controller.rbを開いて下さい。indexというActionに下記の内容を追記することで、入力フォームからの検索を行うことができるようになります。params[:gender]end内容としては、ユーザー名をパラメータとして受け取っている際は、UserというModelのget_by_nameというscopeを使用して絞り込みを行い、性別をパラメータとして受け取っている場合はget_by_genderというscopeによって絞り込みが行われます。ユーザー名と性別の両方を受け取っている場合は両方のscopeを使用します。どちらも受け取っていない場合は、当然絞り込みは行われません。追記後のapp/controllers/users_controller.rbは下記のコードです。endそれでは、実際にブラウザで確認してみましょう。1本項で学習したことを生かし、出身地による絞り込み機能を追加してみましょう。2ユーザー一覧ページに、ユーザー登録画面へのリンクを作成してみましょう。家事も仕事もプログラミングも。2020年版】社会人でも通いやすいプログラミング教室5選|選び方の基準も解説プログラミング学習プログラミングスクール・サービス「エンジニアは女性のキャリアとして魅力的」モノづくり好き理系女子がWebエンジニアへ転職するまで受講生インタビュープログラミング未経験で介護師からエンジニアへ。家事も仕事もプログラミングも。受講生インタビュープログラミング習得後、フリーランスに転身。受講生インタビューフリーランス塾講師からエンジニアへ26才で転職。先生の支えがあって成長できました。学習ガイドtwitterLINE。