为什么 Strong Params 包含 permitted: false
Why Strong Params contains permitted: 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
。
不要直接使用 params
访问参数,而是使用您为允许的参数指定的名称,例如:foobar_params
.
如果定义了foobar_params
:
def foobar_params
params.require(:foobar).permit ...
end
最简单的方法是阅读ActionController::Parameter的源代码,permitted = false
是默认值,除非你调用permit!
来允许所有,但这违背了强参数的目的。
我在控制器的 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
访问参数,而是使用您为允许的参数指定的名称,例如:foobar_params
.
如果定义了foobar_params
:
def foobar_params
params.require(:foobar).permit ...
end
最简单的方法是阅读ActionController::Parameter的源代码,permitted = false
是默认值,除非你调用permit!
来允许所有,但这违背了强参数的目的。