我的控制器正在接收这个参数
{"utf8"=>"✓",
"_method"=>"patch",
"authenticity_token"=>"r5KaLCrb1PR//q4HZ0p30dUeK1OHE7cjtoken=",
"servidor"=>
{"nome"=>"USER NAME",
"tipo"=>"1",
"lotacao_ids"=>{"1"=>["", "86", "13"], "2"=>["", "86"], "3"=>["", "66","103","69"]},
"contatos_attributes"=>{"0"=>{"telefone"=>"9229-8396 ", "id"=>"453"}},
"matricula"=>"8741883",
"cpf"=>"16450724870"},
"action"=>"update",
"controller"=>"servidores",
"id"=>"238"}
但经过
params.require(:servidor).permit(:nome, :tipo, :matricula, :cpf, :contatos_attributes=>[:telefone,:id],:lotacao_ids=>{})
导致
{"nome"=>"USER NAME",
"tipo"=>"1",
"matricula"=>"8741883",
"cpf"=>"16450724870",
"contatos_attributes"=>{"0"=>{"telefone"=>"9229-8396 ", "id"=>"453"}},
"lotacao_ids"=>{}}
如何将参数lotacao_ids
接收为lotacao_ids=>{1=>86, 2=>86, 3=>66}
秋明石油公司
在@ photo的帮助下回答
def servidor_params
params.require(:servidor).permit(:nome, :tipo, :matricula, :cpf, :contatos_attributes=>[:telefone,:id]).tap do |whitelisted|
whitelisted["lotacao_ids"] = params[:servidor]["lotacao_ids"]
end
end
你想做的是违背强参数的想法,因为你基本上无法控制lotacao_ids
哈希中的内容。
请注意,如果在指向散列的键中使用permit,则不会允许所有散列。您还需要指定其中的哪些属性该散列应该被列入白名单。
你作为一个例子给出的参数的一部分表明,这实际上应该是一个id数组,而不是一个散列?
在任何情况下,如果您不关心该字段的内容,您仍然可以将其合并到您首先允许内容后得到的散列中。