コントローラのupdate
アクションの上部にbinding.pry
を配置しました。そのブレークポイントに達したら、params[:foo_bar]
を入力してparams
ハッシュを調べます。ここに私が得るものがあります:
<ActionController::Parameters {"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"123==", "foobar"=><ActionController::Parameters {"barbazz_attributes"=>{"start_date"=>"08/27/2016", "end_date"=>"08/29/2016", "id"=>"89"}, "bazz_id"=>"3", "abc_id"=>"330", "bazzbazz_attributes"=>{"0"=>{"_destroy"=>"1", "city_id"=>"1669", "id"=>"26"}, "1"=>{"city_id"=>"1681", "id"=>"27"}, "2"=>{"city_id"=>"1672"}}} permitted: false>, "cat_id"=>["1", "1", "1"], "commit"=>"Update FooBar", "controller"=>"foo_bars", "action"=>"update", "id"=>"52"} permitted: false>
一部の属性をホワイトリストに登録しなかったため、permitted: false
が存在すると想定しました。属性を調べたところ、すべてをホワイトリストに登録したように見えます。
Rails 5を使用しているのは、それが何らかの違いを生む場合です。
質問:強力なパラメーターがparams: false
を返す理由を簡単に調べる方法は何ですか。
params
で直接paramsにアクセスしないでください。代わりに、許可されたparamsに付けた名前を使用してください。例:foobar_params
。
foobar_params
が定義されている場合:
def foobar_params
params.require(:foobar).permit ...
end
最も簡単な方法は ActionController :: Parameter のソースコードを読み取ることです。permitted = false
を呼び出してすべてを許可しない限り、permit!
がデフォルトですが、強力なパラメーターの目的に反します。 。