Rails params.require on empty hash

use*_*888 3 hash ruby-on-rails strong-parameters

在我的一个控制器中,我有这条线:

params.require(:ad).permit(permitted_array)
Run Code Online (Sandbox Code Playgroud)

params[:ad]哈希.当此哈希中存在允许的密钥时,此行正常工作.如果params[:ad]是空哈希,则上述行失败.

示例:对于params被

{"ad"=>{}, "controller"=>"ads", "action"=>"create"}
Run Code Online (Sandbox Code Playgroud)

params.require(:ad)调用后我收到此错误:

ActionController::ParameterMissing:
   param is missing or the value is empty: advertiser
Run Code Online (Sandbox Code Playgroud)

但这很好用:

[2] pry()> params
=> {"ad"=>{"name"=>"kjj", "ad_type_id"=>1, "fee"=>"9", "click_attr"=>"8", "imp_attr"=>"7"}, "controller"=>"ads", "action"=>"create"}
[3] pry()> params.require(:ad).permit(permitted_array)
=> {"name"=>"kjj", "ad_type_id"=>1, "fee"=>"9", "click_attr"=>"8", "imp_attr"=>"7"}
Run Code Online (Sandbox Code Playgroud)

如何让这一行接受空哈希?

Sha*_*med 10

使params require有条件,只有当它存在时才需要密钥,如下所示:

params.require(:ad).permit(permitted_array) if params[:ad].present?
Run Code Online (Sandbox Code Playgroud)