Top*_*gio 4 ruby ruby-on-rails strong-parameters
我有以下参数,无法获得强大的参数.
这是我的基本代码,为了简单起见,可以在Rails控制台中运行:
json = {
id: 1,
answers_attributes: {
c1: { id: "", content: "Hi" },
c2: { id: "", content: "Ho" }
}
}
params = ActionController::Parameters.new(json)
Run Code Online (Sandbox Code Playgroud)
我读过的所有内容都说下面的内容应该可行,但它只给了我id一个空的哈希answers_attributes:
params.permit(:id, answers_attributes: [:id, :content])
=> { "id"=>1, "answers_attributes"=>{} }
Run Code Online (Sandbox Code Playgroud)
如果我代之以手动列表c1和c2(如下所示)它可以工作,但这真的很愚蠢,因为我不知道用户将提供多少答案,这是很多重复:
params.permit(:id, answers_attributes: { c1: [:id, :content], c2: [:id, :content] })
=> {"id"=>1, "answers_attributes"=>{"c1"=>{"id"=>"", "content"=>"Hi"}, "c2"=>{"id"=>"", "content"=>"Ho"}}}
Run Code Online (Sandbox Code Playgroud)
我试图取代c1,并c2用0和1,但我仍然需要手工提供0,并1在我的permit语句.
如何允许未知长度的嵌套属性数组?
它的语法如下:
answers_attributes: [:id, :content]
Run Code Online (Sandbox Code Playgroud)
问题是你在使用的密钥answers_attributes.预计它们将成为answers_attributes新记录的ids 0.
更改这些会给出您的预期结果:
json = {
id: 1,
answers_attributes: {
"1": { id: "", content: "Hi" },
"2": { id: "", content: "Ho" }
}
}
params = ActionController::Parameters.new(json)
params.permit(:id, answers_attributes:[:id, :content])
=> {"id"=>1, "answers_attributes"=>{"1"=>{"id"=>"", "content"=>"Hi"}, "2"=>{"id"=>"", "content"=>"Ho"}}}
Run Code Online (Sandbox Code Playgroud)
编辑:看起来0不是唯一的键,我的意思是如果你有两个new记录.我使用nested_form,似乎使用了很长的随机数.
| 归档时间: |
|
| 查看次数: |
3495 次 |
| 最近记录: |