全アクション共通メソッドを利用してナビゲーションバーに検索フォームを配置する
検索フォームをナビゲーションバーのような共通viewファイルに置くにはどうしたらいいのか、一瞬迷ったのでメモ。
今回は、以下で作成した検索フォームをnavigation barに配置したいと思います。
実装
Railsでは、全てのControllerがApplicationController
クラスを継承しています。
なので、このApplicatoinControllerクラスでbefore_actionを設定してやります。ransackでは、検索フォームのヘルパーメソッドに検索クエリを食わせてやる必要があるので、以下のようにして全てのアクションで@q
を仕込めるようにします。
class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception before_action :set_search_query def set_search_query @q = Bean.search(params[:q]) end end
これであとはViewアフィルにフォームを差し込めばいいだけです。
%body %nav - # ... = search_form_for @q do |f| = f.label :id_cont, "id" = f.search_field :id_cont %br = f.label :origin_name_cont, "オリジン" = f.search_field :origin_name_cont %br = f.label :origin_name_or_bean_variety_name_or_bean_cultivar_name_cont, "オリジン or 種 or 品種" = f.search_field :origin_name_or_bean_variety_name_or_bean_cultivar_name_cont %br = f.submit %hr = yield
ということで、簡単にできました。一応メモということで。