0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rails Ransackを使った検索機能

Last updated at Posted at 2021-09-09

#ransackとは
ransackとは検索機能を実装するためのツールです。

#ransack導入


gem 'ransack'

その後

$ bundle install

で導入できます。

#routes.rbに追加

routes.rb

Rails.application.routes.draw do
     
      #省略
          collection do
           get 'search'
    end
  end
end

 get 'search'をルーティングに追加します。
コントローラーのアクション以外を使う時はcollection doを使うみたいです。

#コントローラーにsearchアクションを追加
検索機能を取得するためにはprivate以下にメソッドを追記し、before_actionで
呼び出します。

users_controller.rb

class UsersController < ApplicationController
     
     #省略
  before_action :set_q, only: [:index, :search]

  def index
    @users = User.all
  end


#省略


   def search
    @results = @q.result
  end



    def set_q
    @q = User.ransack(params[:q])
  end


        private

    def set_q
    @q = User.ransack(params[:q])
  end


    #省略

end

*下の文は下の資料から引用します。

⚫︎params[:q] この後に作成するビューファイルから送られてくるパラメーター
⚫︎ransackメソッド 送られてきたパラメーターを元にテーブルからデータを検索するメソッド
⚫︎resultメソッド ransackメソッドで取得したデータを ActiveRecord_Relationの
オブジェクトに変換するメソッド

#キーワード検索方法

index.html.erb

<%= search_form_for @q do |f| %>
  <%= f.label :name, "Keyword" %>
  <%= f.search_field :name_cont %>
  <%= f.label :job_eq, '仕事' %>
  <%= f.search_field :job_eq %>

  <%= f.submit "検索" %>
<% end %>

<%= search_form_for @q do |f| %>〜<% end %>の間のコードが検索フォームです。

#いろいろな検索機能の種類

上のキーワード検索以外にも
数値の対象検索複数の選択検索などもあるみたいです。
他の検索機能は下の資料が詳しいのいで確認してください。

#よく使うメソッド
下のメソッドがよく使うみたいです。

[検索したいカラム名]_eq 完全に一致するとき
[検索したいカラム名]_not_eq 完全に一致しないとき
[検索したいカラム名]_matches 一部が一致するとき
[検索したいカラム名]_does_not_match 一部が一致しないとき

他にもたくさんあるので下の資料から調べてみてください。

⚫︎参考資料
https://pikawaka.com/rails/ransack
https://qiita.com/nojinoji/items/e1b174220da8c81a1756

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?