個人アプリ開発 検索機能の実装
作業内容
検索機能の実装を行いました。
フォームに2つの入力欄を持つ、詳細検索機能です(エリアの検索+キーワード検索)。
※キーワード検索は名前・キャッチフレーズ・タイトル・テキストの全てのカラムを検索します
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)機能も付与したいと思います。