Rails-Formulare mit mehreren verschachtelten Modellen verursachen Probleme mit Funkgruppen
Ich habe ein Problem mit verschachtelten Modellformularen, die Optionsfelder enthalten. Wenn ich mehrere Modelle habe, werden alle Optionsfelder als Teil derselben Gruppe behandelt.
Mein Modell enthält eine has_many-Beziehung wie diese:
class Order < ActiveRecord::Base
has_many :order_items
accepts_nested_attributes_for :order_items
end
Class OrderItem < ActiveRecord::Base
belongs_to :order
end
Ich habe dann einen Teil, der das schafftOrderItem
Modell Form mit
<% fields_for "order[order_items_attributes][]", order_item do |f| %>
In diesem Formular ist eine Gruppe von Optionsfeldern enthalten, die in einer for-Schleife mit erstellt wurden
radio_button_tag "order[order_items_attributes][][colour_id]", "#{colour.id}"
Dies funktioniert problemlos, wenn nur ein untergeordnetes Element vorhanden ist. Sobald Sie jedoch mehrere untergeordnete Elemente einfügen, gehören alle Optionsfelder zu derselben Gruppe, da sie alle dasselbe Attribut habenname="order[order_items_attributes][][colour_id]"
. Dies ist alles auf einem neuen Modell-Formular, so dass ich keine Array-Indizes verwenden kann (name="order[order_items_attributes][0][colour_id]"
) wie Rails gibt den Fehlerexpected Hash (got Array) for param 'order_items_attributes'
Bei diesem letzten Teil habe ich mich geirrt. Der Fehler lag darin, dass ich indizierte und nicht indizierte Namensattribute gemischt habe. Das Hinzufügen von Indexwerten war der Schlüssel zur Lösung dieses Problems.
Hier ist der Inhalt derparams[:order]
Hash, wenn nur ein verschachteltes Modell vorhanden ist:
{"order_items_attributes"=>
[{"size"=>"Small",
"colour_id"=>"4"],
"first_name"=>"sdf",
"last_name"=>"sdf",
"email"=>"[email protected]"}
Und wenn zwei verschachtelte Modelle vorhanden sind:
{"order_items_attributes"=>
[{"size"=>"Small",
"colour_id"=>"4"},
{"size"=>"Small"}],
"first_name"=>"sdf",
"last_name"=>"sdf",
"email"=>"[email protected]"}
Da sieht man nur das ersteorder_item
hat das Attribut colour_id. Dies geschieht unabhängig davon, zu welchem Modell das ausgewählte Optionsfeld gehört (was Sinn macht).
Wie kann ich die Optionsfelder so rendern, dass für jedes untergeordnete Modell eine separate Gruppe erstellt wird?