今回はRuby on Railsで検索フォームの作成をしたい思います。
最終的にはECサイトを作成したいと思います。
環境
OS/ミドルウェア | バージョン |
---|---|
CentOS | 7.2.1511 |
ruby | 2.4.2p198 |
Rails | 5.1.4 |
モデルファイル編集
ディレクトリの場所「app/models/」
対象ファイル「user.rb」
[ファイルの編集]
1 |
$ vi app/models/user.rb |
[ファイルの中身]
1 2 3 4 5 6 7 8 9 |
class User < ApplicationRecord def self.search(search) #self.でクラスメソッドとしている if search # Controllerから渡されたパラメータが!= nilの場合は、titleカラムを部分一致検索 User.where(['email LIKE ?', "%#{search}%"]) else User.all #全て表示。 end end end |
検索フォーム作成
ディレクトリの場所「app/views/shopping/」
対象ファイル「index.html.erb」
[ファイルの編集]
1 |
$ vi app/views/shopping/index.html.erb |
[ファイルの中身]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<div id="header"> <div class="nav-left"> <div id="head-logo"> <%= link_to image_tag('logo_001.png'), '/' %> </div><!-- head-logo --> </div><!-- nav-left --> // ↓ ここから <div id="nav-search"> <%= form_tag '/', :method => 'get' do %> <p> <%= text_field_tag :search, params[:search] %> <%= submit_tag "検索", :name => nil %> </p> <% end %> </div><!-- nav-search --> // ↑ ここまで追加 </div><!-- header --> <h1>Hello</h1> <p> 現在登録されているユーザは次のとおりです。 </p> <p> <!-- アクションから渡されてきたモデルクラスのオブジェクトの配列の数だけ順にメールアドレスとパスワードを取得して画面に>表示 --> <% @users.each do |user| %> [メールアドレス] <%= user.email %> [パスワード] <%= user.password %><br /> <% end %> </p> |
コントローラー変更
ディレクトリの場所「app/controllers/」
対象ファイル「shopping_controller.rb」
[ファイルの編集]
1 |
$ vi app/controllers/shopping_controller.rb |
[ファイルの中身]
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class ShoppingController < ApplicationController def index # ViewのFormで取得したパラメータをモデルに渡す @users = User.search(params[:search]) end def commodity # テキストを出力する render plain: '商品を購入する処理' end end |
[変更箇所]
1 2 3 4 5 6 7 |
// 変更前 # usersテーブルのデータを全て取得 @users = User.all // 変更後 # ViewのFormで取得したパラメータをモデルに渡す @users = User.search(params[:search]) |
これでファイル編集完了。
検索機能実装できましたね。
動作確認
それではRailsアプリケーションを起動してここまでの動作を確認してみます。ターミナルを起動し、起動させたいアプリケーションのルートディレクトリに移動して下さい。そして下記のコマンドを実行して下さい。
[Railsサーバ起動]
1 |
$ rails server -b 0.0.0.0 |
ブラウザから次のURLへアクセスして下さい。
1 |
http://☓☓☓.☓☓.☓☓☓.☓☓:3000/ |
[検索結果]
「test0@gmail.com」で検索をしたところ上記のように検索できました。
これで一通りの作業が終了しました。
Ruby on Rails5でコントローラーからテンプレートの表示
Ruby on Rails5でモデルの作成とデータベースの利用
Ruby on Rails5でBootstrap4デザインにする
Ruby on Rails5で検索フォームと一体型になった検索ボタン作成方法
Ruby on Rails5でFontAwesomeを導入する方法(アイコンが使用可能)
Ruby on Rails5でBootstrap4のナビゲーションバーを使用する方法
Ruby on Rails5でBootstrap4のナビゲーションバーに画像(ロゴ)を設置
Ruby on Rails5でBootstrap4を使用しながらCSSを使用する
Ruby on Rails5でBootstrap4のドロップメニューをホバー表示する方法
Ruby on Rails5でBootstrap4のドロップメニューログインアイコンを作成
Ruby on Rails5でBootstrap4のドロップメニューでカートアイコンを作成
Ruby on Rails5でBootstrap4のドロップメニューで注文履歴を作成