web-dev-qa-db-ja.com

Strong Paramsが許可されている理由:false

コントローラの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を返す理由を簡単に調べる方法は何ですか。

14
Neil

paramsで直接paramsにアクセスしないでください。代わりに、許可されたparamsに付けた名前を使用してください。例:foobar_params

foobar_paramsが定義されている場合:

def foobar_params
  params.require(:foobar).permit ...
end

最も簡単な方法は ActionController :: Parameter のソースコードを読み取ることです。permitted = falseを呼び出してすべてを許可しない限り、permit!がデフォルトですが、強力なパラメーターの目的に反します。 。

11
Leonel Galán