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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage