将Rails中的嵌套参数列入白名单



我有一个具有以下结构的参数散列(它是使用fields_for构建的)

=> {"utf8"=>"✓",
    "daily_log"=>
      {"id"=>"1",
       "entries_attributes"=>
          {"0"=>
              {"count"=>"",
               "hours"=>"",
               "minutes"=>"",
              }
          }
       },
    "controller"=>"entries",
    "action"=>"create"}

我试图创建一个entries_attributes_params方法,它应该只是返回params['daily_log']['entries_attributes']的白名单版本。不幸的是,当我调用该方法时,它总是以{}的形式返回。

以下作品

def entries_attributes_params`
   params[:daily_log][:entries_attributes].permit!
end

但是我想避免使用permit!。所以我尝试了以下操作:

def entries_attributes_params
    params[:daily_log][:entries_attributes].permit(:count, :hours, :minutes)
end

这行不通。我得到了{}

我尝试用[]包装我传递到permit的属性,但这不起作用。

...permit([...attributes...])

我该怎么做?

试试这个:

def entries_attributes_params
  params_hash = params.require(:daily_log).permit(:id, entries_attributes: [:count, :hours, :minutes])
  params_hash[:entries_attributes]
end

明白了。关键是要认识到params.permit ...实际上并没有改变主参数散列。它创建了一个新对象。将这个想法与K M的解决方案结合起来,就得到了完整的答案:

def entries_attributes_params
  p = params.require(:daily_log).permit(:id, entries_attributes: [:count, :hours, :minutes])
  p[:entries_attributes]
end

最新更新