以下の内容はhttps://haayaaa.hatenablog.com/entry/2019/03/14/202806より取得しました。


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

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

 

 

エラー内容

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

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

 

 




以上の内容はhttps://haayaaa.hatenablog.com/entry/2019/03/14/202806より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14