So habe ich ein Modell mit dieser Struktur:Rails 5 fields_for unter einer Sammlung nisten
document {
structure {
id,
...
},
fields {
field {
id,
...
},
value {
...
}
}
}
Und ich versuche, gemeinsam ein Formular für die Felder zu bringen, wo die Felder aussehen würde:
<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]" />
...
Das ist, was ich derzeit tue:
<%= 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 %>
Aber die daraus resultierenden Feldnamen sind:
document[fields][field][id]
document[fields][value][value]
Mit anderen Worten, die Indizes fehlen.
Die Verwendung von <%= builder.hidden_field :id, value: df.field.id %>
ergibt das richtige Format, aber keinen Index (weil das Feldobjekt noch keine ID hat): document[fields][][id]
, aber das ist keine Option für Wert, da mehrere Felder beteiligt sein können.
Gibt es eine Möglichkeit, dies mithilfe der Formularhelfer zu tun, oder ist das, was ich gerade mache zu wackelig?
Edit: Hier sind die beteiligten Modelle:
Die Idee ist, eine konfigurierbare Menge von Feldern für Dokument zu haben. Die Struktur bestimmt verfügbare Felder, und ein Dokumentfeld ist eine Beziehung zwischen einem Dokument und einem Feld mit einem enthaltenen Wert.
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
Können Sie Ihre Modelle hinzufügen, um zu versuchen, Ihr Szenario zu reproduzieren? –
Zum Beitrag hinzugefügt – user1456632