Rails params.require on empty hash

时间:2016-01-14 21:06:06

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

在我的一个控制器中,我有一行:

params.require(:ad).permit(permitted_array)

params[:ad]是一个哈希值。当此哈希中存在允许的密钥时,此行正常工作。当params[:ad]为空哈希时,上述行失败。

示例:params

{"ad"=>{}, "controller"=>"ads", "action"=>"create"}

调用params.require(:ad)后出现此错误:

ActionController::ParameterMissing:
   param is missing or the value is empty: advertiser

但这很好用:

[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"}

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

1 个答案:

答案 0 :(得分:9)

使参数require有条件,仅在密钥存在时才需要密钥,如下所示:

params.require(:ad).permit(permitted_array) if params[:ad].present?