wrap_parameters
仕事中見つけたrailsのメソッドです。
POSTリクエストを送っていたら別のcontrollerでのエラーが出ました。
paramsをプリントアウトしてみると、こんな感じのものが出てきました。railsは勝手にこのActionController::Parametersというクラスを作ってくれるようです。これがstrong paramsに使われるみたいです。cats_pathとかの。
以下は私がcats_controllerをつかっている際リクエスト時に行ったparamsです。
{
"name"=>"kiwi",
"controller"=>"cats",
"action"=>"create",
"cat"=> #wrapしてる部分
#<ActionController::Parameters {
"name"=>"kiwi"
} permitted: false>
permitted: false
}
問題は、別のコントローラーで"cat"というparams keyが使われていたことでした。こんな感じ
#全然違うcontrollerの中
def current_cat
@_current_cat ||=
if key = params[:cat]
return ...
end
end
そしてrailsはparams[:cat]が二つあって混乱してエラーを出しました。そこで私が触ってたcats_controllerの中で、wrapper_parametersの設定を追加で書いてあげるとwrapしてた部分を外してくれるそうです。
一番最後にある例ですね。私のもこんなふうにしてみました。wrapperが取れました。
class CatsController < ApplicationController
wrap_parameters false
end
久しぶりのrails magicでした。はるばる1年ぶりかな〜
この記事が気に入ったらサポートをしてみませんか?