個人アプリ開発 検索機能の実装

作業内容

検索機能の実装を行いました。
フォームに2つの入力欄を持つ、詳細検索機能です(エリアの検索+キーワード検索)。
※キーワード検索は名前・キャッチフレーズ・タイトル・テキストの全てのカラムを検索します

f:id:kobegoro:20200826225632p:plain

gem ransackのインストール

今回はransackを用いました。
gem無しでも実装は可能ですが、単純に興味があったのと、かなりシンプルな記述ができそうだと思った為です。

[Gemfile]
ーーー追記ーーー
gem 'ransack'
[terminal]
$ bundle install
ルーティング設定
resources :groups do
    collection do
      get 'search'
    end
end
コントローラ編集
[groups_controller.rb]
def search
    @search_product = Group.ransack(params[:q]) 
    @groups = @search_product.result
end
[top_controller.rb]
def index
    ーーー追記ーーー
    @q = Group.ransack(params[:q])
end

private

def search_params
    params.require(:q).permit(:area, :text)
end
ビュー編集
.search-form__search-box
      = search_form_for(@q, url: search_groups_path, class: "in-search-form") do |f|
        .search-form__search-box__wrapper
          .search-form__search-box__wrapper__input-area
            = f.text_field :area_cont, id: 'area', class: "search-input", placeholder: 'エリア [ 例:東京 ]'
          .search-form__search-box__wrapper__input-keyword
            = f.text_field :name_or_catchphrase_or_title_or_text_cont, id: 'text', placeholder: 'キーワード [ 例:ペンギン ] '
          .search-form__search-box__wrapper__submit-btn                                                                   
            = f.submit "検  索", class: 'btn'


理解するのに若干時間はかかりましたが、完成してみれば書いたコードの短さに驚き。ransack便利すぎました。
ビューでカラムの検索方法を指定できるのもすごい(あいまい検索や前方一致など)。


参考:https://qiita.com/nakanishi03/items/2fbcc8ba06b336291321


また後日インクリメンタルサーチAjax)機能も付与したいと思います。