在 Rails Forms 中,如何按关联的主键而不是按索引键对嵌套关联进行键化?



使用 Rails (4.2( 表单,如何构造一个表单,使请求的有效负载将嵌套关联表示为哈希,该哈希由关联的主键键键?

我有一个嵌套表单,如文档中所示。如果向下滚动,您将看到以下示例:

<%= form_for @person do |person_form| %>
...
<%= person_form.fields_for :projects do |project_fields| %>
Project #<%= project_fields.index %>
...
<% end %>
...
<% end %>

当表单发出 HTTP PATCH 请求时,我的端点收到的有效负载的形状如下:

"person"=>{"project_attributes"=>{"0"=>{...}, "1"=>{...}, "2"=>{...}...}}

我希望键不是表示数字排序索引的project_attributes键,而是项目的主键id

编辑:

我希望密钥成为项目主密钥的原因是,在我的控制器中,我可以更轻松地更新项目,如下所示:

# Option 1
Project.update(params[:project_attributes].keys, params[:project_attributes].values)
# Option 2
params[:project_attributes].keys.each do |project_id|
Project.update(project_id, params[:project_attributes][project_id])
end

您需要使用accepts_nested_attributes_for来执行此操作,并且无需担心参数及其传递方式。

有关如何使用accepts_nested_attributes_for的参考,请遵循本指南。

最新更新