我在包含单选按钮的嵌套模型表单中遇到问题,当我有多个模型时,所有单选按钮都被视为在同一组中。
我的模型包含这样的 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"=>"sdfg@sgf.com"}
当存在两个嵌套模型时:
{"order_items_attributes"=>
[{"size"=>"Small",
"colour_id"=>"4"},
{"size"=>"Small"}],
"first_name"=>"sdf",
"last_name"=>"sdf",
"email"=>"sdfg@sgf.com"}
如您所见,只有第一个order_item
具有它的 colour_id 属性。无论所选单选按钮属于哪个模型,都会发生这种情况(这是有道理的)。
如何渲染单选按钮,以便为每个子模型创建一个单独的组?