为什么强Params包含允许:false

时间:2016-06-14 17:30:47

标签: ruby-on-rails ruby strong-parameters

我在控制器的binding.pry操作顶部放了一个update。在那个断点处,我输入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 个答案:

答案 0 :(得分:5)

请勿使用params直接访问参数,而是使用您提供的允许参数名称,例如:foobar_params

如果定义了foobar_params

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

最简单的方法是阅读ActionController::Parameter的源代码,permitted = false是默认值,除非您调用permit!允许所有内容,但这会破坏强参数的目的。