LoginSignup
0
0

More than 3 years have passed since last update.

Railsにて検索機能を追加する。

Posted at

概要

アプリケーション内でデータを検索できる機能があると、ユーザーがデータを探す際便利である。検索機能はSNS等でもよくある機能なので、実際に検索機能を実装してみる。
userというテーブルがあるとした場合、userを検索する機能を実装する。

1.ルーティングの設定

userを扱うUserModel、UsersControllerは作成されていることを前提とします。

/config/routes.rb
# 省略
  resources :users do
    get "search", on: :collection
  end

searchアクションはリソースの集合を表すためon: :collectionを追加します。

2.モデルにクラスメソッドsearchを追加

/app/model/user.rb
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アクションを追加

app/controllers/users_controller.rb
# 省略
def search
  @users = User.search(params[:q])
  render "index"
end

Userモデルで定義したクラスメソッドsearchをここで使用します。

4.viewにフォームを記載

app/views/users/index.html.erb
# 省略
<%= 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を扱う箇所もありましたので、これを機会に勉強していきたいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0