为什么强Params包含允许:false

Nei*_*eil 11 ruby ruby-on-rails 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>  
Run Code Online (Sandbox Code Playgroud)

我假设permitted: false是因为我没有将某些属性列入白名单.我查看了属性,在我看来,我确实将所有内容列入白名单.

我正在使用Rails 5,如果这恰好有任何区别.

问题:找出强参数返回原因的简便方法是什么params: false.

Leo*_*lán 7

不要直接params使用params,而是使用您给出的允许参数的名称,例如:foobar_params.

如果foobar_params定义:

def foobar_params
  params.require(:foobar).permit ...
end
Run Code Online (Sandbox Code Playgroud)

最简单的方法是阅读的源代码的ActionController ::参数,permitted = false除非你调用默认的permit!允许所有,但违背了强大的参数的目的.

  • 它总是!例如,这是为了防止您无意中在 `Foobar.create` 上使用参数。 (2认同)