クエリパラメータを次のアクションへ渡す

現在のアクションで持っているクエリパラメータをそのまま次のアクションに渡そうと思ったのですが、少し気をつけないと次のアクションへ渡せなかったので、その方法を書き留めておきます。

 

 

エラー内容

次のアクションにも渡したいクエリパラメータがある時は、パラメータをビューに渡すためにインスタンス変数に代入します。

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