Rails 5 fields_for 嵌套在一个集合下
Rails 5 fields_for nesting under a collection
所以我有一个具有这种结构的模型:
document {
structure {
id,
...
},
fields {
field {
id,
...
},
value {
...
}
}
}
我正在尝试为这些字段组合一个表单,这些字段看起来像:
<input type="hidden" name="document[fields][0][field][id]" />
<input type="text" name="document[fields][0][value]" />
<input type="hidden" name="document[fields][1][field][id]" />
<input type="text" name="document[fields][1][value]" />
...
这是我目前正在做的事情:
<%= document.fields.each_with_index do |df, i| %>
<%= f.fields_for "fields[]", df do |builder| %>
<p>
<%= builder.label df.field.name %>
<%= builder.fields_for :field do |field_builder| %>
<%= field_builder.hidden_field :id, value: df.field.id %>
<% end %>
<%= builder.fields_for :value do |value_builder| %>
<%= render df.field.edit_view, field: df.field, builder: value_builder %>
<% end %>
</p>
<% end %>
<% end %>
但是生成的字段名称是:
document[fields][field][id]
document[fields][value][value]
换句话说,索引丢失了。
使用 <%= builder.hidden_field :id, value: df.field.id %>
结果格式正确但没有索引(因为字段对象还没有 id):document[fields][][id]
但这不是值的选项,因为可能有多个字段涉及。
有没有办法使用表单助手来做到这一点,或者我做的事情太靠谱了?
编辑:以下是涉及的模型:
想法是为文档设置一组可配置的字段。结构决定了可用的字段,document_field是文档和包含值的字段之间的关系。
class Field < ApplicationRecord
belongs_to :structure
end
class Document < ApplicationRecord
belongs_to :structure
has_many :document_fields
class DocumentField < ApplicationRecord
belongs_to :document
belongs_to :field
class Structure < ApplicationRecord
has_many :fields
您应该配置一个 nested attributes setup on your models,在控制器上构建那些嵌套关系,并在您的 form_for
块中实例化一个对象,而不是传递引用符号。
所以我有一个具有这种结构的模型:
document {
structure {
id,
...
},
fields {
field {
id,
...
},
value {
...
}
}
}
我正在尝试为这些字段组合一个表单,这些字段看起来像:
<input type="hidden" name="document[fields][0][field][id]" />
<input type="text" name="document[fields][0][value]" />
<input type="hidden" name="document[fields][1][field][id]" />
<input type="text" name="document[fields][1][value]" />
...
这是我目前正在做的事情:
<%= document.fields.each_with_index do |df, i| %>
<%= f.fields_for "fields[]", df do |builder| %>
<p>
<%= builder.label df.field.name %>
<%= builder.fields_for :field do |field_builder| %>
<%= field_builder.hidden_field :id, value: df.field.id %>
<% end %>
<%= builder.fields_for :value do |value_builder| %>
<%= render df.field.edit_view, field: df.field, builder: value_builder %>
<% end %>
</p>
<% end %>
<% end %>
但是生成的字段名称是:
document[fields][field][id]
document[fields][value][value]
换句话说,索引丢失了。
使用 <%= builder.hidden_field :id, value: df.field.id %>
结果格式正确但没有索引(因为字段对象还没有 id):document[fields][][id]
但这不是值的选项,因为可能有多个字段涉及。
有没有办法使用表单助手来做到这一点,或者我做的事情太靠谱了?
编辑:以下是涉及的模型:
想法是为文档设置一组可配置的字段。结构决定了可用的字段,document_field是文档和包含值的字段之间的关系。
class Field < ApplicationRecord
belongs_to :structure
end
class Document < ApplicationRecord
belongs_to :structure
has_many :document_fields
class DocumentField < ApplicationRecord
belongs_to :document
belongs_to :field
class Structure < ApplicationRecord
has_many :fields
您应该配置一个 nested attributes setup on your models,在控制器上构建那些嵌套关系,并在您的 form_for
块中实例化一个对象,而不是传递引用符号。