Форма Rails с несколькими вложенными моделями вызывает проблемы с радиогруппами
У меня проблема с вложенными модельными формами, которые содержат переключатели, когда у меня несколько моделей, все переключатели рассматриваются как находящиеся в одной группе.
Моя модель содержит отношение has_many, например:
class Order < ActiveRecord::Base
has_many :order_items
accepts_nested_attributes_for :order_items
end
Class OrderItem < ActiveRecord::Base
belongs_to :order
end
У меня тогда есть частичное, которое создаетOrderItem
модель с использованием формы
<% fields_for "order[order_items_attributes][]", order_item do |f| %>
В этой форме содержится группа переключателей, созданных внутри цикла for с
radio_button_tag "order[order_items_attributes][][colour_id]", "#{colour.id}"
Это прекрасно работает, когда есть только один дочерний элемент, однако, как только я вставляю несколько дочерних элементов, все переключатели принадлежат к одной группе, поскольку все они имеют одинаковый атрибутname="order[order_items_attributes][][colour_id]"
, Это все в новой форме модели, поэтому я не могу использовать индексы массива (name="order[order_items_attributes][0][colour_id]"
) как Rails выдает ошибкуexpected Hash (got Array) for param 'order_items_attributes'
В последней части я ошибался, ошибка была из-за того, что я смешивал индексированные и неиндексированные атрибуты имен. Добавление значений индекса было ключом к решению этой проблемы.
Вот содержимоеparams[:order]
хэш, когда присутствует только одна вложенная модель:
{"order_items_attributes"=>
[{"size"=>"Small",
"colour_id"=>"4"],
"first_name"=>"sdf",
"last_name"=>"sdf",
"email"=>"[email protected]"}
И когда присутствуют две вложенные модели:
{"order_items_attributes"=>
[{"size"=>"Small",
"colour_id"=>"4"},
{"size"=>"Small"}],
"first_name"=>"sdf",
"last_name"=>"sdf",
"email"=>"[email protected]"}
Как видно только первоеorder_item
имеет свой атрибут colour_id. Это происходит независимо от того, к какой модели принадлежал выбранный переключатель (что имеет смысл).
Как сделать так, чтобы переключатели создавали отдельную группу для каждой дочерней модели?