Ruby on Railsでsearch(検索)の作成
今回は検索を出きるようにしてみました。
ユーザー名を検索する際に名前で検索をしてみました。
これはデータベースで全然違ってくるのでパラメーターは自由に変えてOKです
まずはパラメーターの:nameが空ではない(!=否定)をしてします。
LIKEは等号の(=)の代わりにLIKE演算子を使っています。
これによりワイルドカード記号(%=ワイルドカード)を使用できるようです。
そしてif params[:name].present?で、パラメーターが空でない(present=空ではない)となる
それ以外の時(else)は順番にデータベースのcreated_atをDESC順にならべている
def search if !params[:name].blank? @users = User.where(["name LIKE ?", "%#{params[:name]}%"]). page(params[:page]).per(30) if params[:name].present? else @users = User.order("created_at DESC"). page(params[:page]).per(30) end render :action => "index" end
ここは問題ありません。前回同様のフォームの書き方です。
今回usersや@user、Userなど指定していないのに出てきていますが、
私は作成済みの環境でプラスしているためにこの様になってます。
usersというモデルやコントローラが存在しているためである
<%= form_tag [:search, :administrator_users ], :method => :get do %> <table class="list"> <tr> <th style="text-align: right">ID</th> <td><%= text_field_tag "name", params[:name] %></td> <td><%= submit_tag "検索" %></td> </tr> </table> <% end %>