クエリパラメータを次のアクションへ渡す
現在のアクションで持っているクエリパラメータをそのまま次のアクションに渡そうと思ったのですが、少し気をつけないと次のアクションへ渡せなかったので、その方法を書き留めておきます。
エラー内容
次のアクションにも渡したいクエリパラメータがある時は、パラメータをビューに渡すためにインスタンス変数に代入します。
def index
@params = params[:q]&.(:foo) //次のアクションに渡したいパラメータを設定
略
end
コントローラで設定した@paramsを次に呼ばれるアクションに渡したいので、パスの引数に渡しています。
= link_to "#{foo.bar.name} ↗︎", bar_path(foo.bar, q: @params)
次のアクションでは、渡されたクエリパラメータを受け取りたいので以下のように記述しました。
def show
@params = params[:q]&.(:bazz) //前のアクションからパラメータを受け取ろうとしている
略
end
しかし、これだと以下のようなエラーが出てしまい、パラメータを渡すことが出来ませんでした。
NoMethodError (undefined method `call' for #<ActionController::Parameters:0xxxxxxxx>):
解決法
ストロングパラメータの時のように、受け取ったパラメータにpermitメソッドを実行してあげると、無事パラメータを取得することが出来ました。
def show
@params = params[:q]&.permit(:bazz) //前のアクションからパラメータを受け取ろうとしている
略
end
感想など
なんだかもっとスマートにパラメータを渡してあげる方法があるような気がしますw