2016-06-14 3 views
6

コントローラの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を入力してください。

+1

paramsを許可するコードを教えてください。通常、これは名前を持つメソッドです: 'foobar_params'とし、' params'から直接ではなく、このメソッドを通して許可されたparamsにアクセスします。それはたぶんあなたが許可されている偽を見ている理由です。 easietの方法は、ソースコードを読むことです:https://github.com/rails/strong_parameters/blob/master/lib/action_controller/parameters.rb#L42、 'permitted = false'はデフォルトで' permit!すべてを許可するが、それは強いパラメーターの目的を破る。 – Leito

答えて

2

paramsで直接パラメータにアクセスしないでください。許可されたパラメータを指定した名前を使用してください(例:foobar_params)。

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

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

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

+1

ありがとう! 'foobar_params'を使うと' permitted:true'が表示されます。私はそれが何か単純なものになることを知っていた! – Neil

+1

それはいつもです!これは、例えば、 'Foobar.create'で誤ってparamsを使用することを防ぐためです。 – Leito

関連する問題