ransackでRailsに検索機能を実装する

Raislのアプリケーションに検索機能を実装してみます。

RansackというGemが便利だということを聞いたので、今回はRansackを使って検索機能を実装してみます。

まずGemfileにransackを追加してbundle installしてください。

gem 'ransack'

コントローラーは、下記のように書きます。

def index
  @q = Person.ransack(params[:q])
  @people = @q.result(distinct: true)
end

表示順などを設定したい場合は、通常と同じように下記のように書けます。

def index
    @q = Person.ransack(params[:q])
    @people = @q.result(distinct: true).page(params[:page]).per(20).order('created_at DESC')
end

最後にフォームを実装します。

フォームは、search_form_forを使います。

また、検索対象の項目をxxxx_or_yyyy_contのようにname値として記述します。title_or_content_contの場合、titleカラムかcontentカラムに検索キーワードが含まれているかどうかを判定します。

<%= search_form_for @q do |f| %>
    <%= f.search_field :title_or_content_cont, class: "form-control mb-2 mr-sm2 mb-sm0 mr5", placeholder: "検索ワード" %>
    <%= f.submit value: "検索", class: "btn btn-main"  %>    
<% end %>

Ransackは他にも検索に関する機能が色々あるみたいですので、今後も使っていきたいです。

参考

シェアする

  • このエントリーをはてなブックマークに追加

フォローする