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, placeholder: "検索ワード" %>
    <%= f.submit value: "検索" %>    
<% end %>

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

参考

Ruby on Railsをこれから本格的に勉強したい人は「エンジニアになるための600時間のプログラミング学習に耐え抜くコツ」という記事がおすすめです。

シェアする

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

フォローする