見出し画像

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年ぶりかな〜

この記事が気に入ったらサポートをしてみませんか?