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時間のプログラミング学習に耐え抜くコツ」という記事がおすすめです。