#概要
アプリケーション内でデータを検索できる機能があると、ユーザーがデータを探す際便利である。検索機能はSNS等でもよくある機能なので、実際に検索機能を実装してみる。
userというテーブルがあるとした場合、userを検索する機能を実装する。
#1.ルーティングの設定
userを扱うUserModel、UsersControllerは作成されていることを前提とします。
# 省略
resources :users do
get "search", on: :collection
end
searchアクションはリソースの集合を表すためon: :collectionを追加します。
#2.モデルにクラスメソッドsearchを追加
class User < ApplicationRecord
class << self
def search(query)
rel = order("id")
if query.present?
rel = rel.where("カラム名 LIKE ?, "%#{query}%")
end
rel
end
end
end
class << self〜endでクラスメソッドを定義できます。
ローカル変数relを定義し、検索ワードが空でなければSQLのLIKEを使用し、該当カラムから対象のレコードを絞り込みます。
#3.コントローラにsearchアクションを追加
# 省略
def search
@users = User.search(params[:q])
render "index"
end
Userモデルで定義したクラスメソッドsearchをここで使用します。
#4.viewにフォームを記載
# 省略
<%= form_tag :search_users, method: :get, class: "search" do %>
<%= text_field_tag "q", params[:q] %>
<%= submit_tag "検索" %>
<% end %>
form_tagは引数にパスを指定したフォームを作成します。デフォルトのmethodがPOSTであるため、getメソッドを指定しています。
text_field_tagでフォームを作り、検索ワード"q"は検索後もフォーム内に残しておくために第2引数にparams[:q]を指定しています。
#まとめ
以上で、検索機能を実装できます。
SQLを扱う箇所もありましたので、これを機会に勉強していきたいです。