在我的一个控制器中,我有一行:
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"}
如何让这一行接受空哈希?
答案 0 :(得分:9)
使参数require
有条件,仅在密钥存在时才需要密钥,如下所示:
params.require(:ad).permit(permitted_array) if params[:ad].present?