I am trying to create multiple checkbox tags for second level embedded documents. However, now it just creates new objects. I have models
class Paprasa
include Mongoid::Document
attr_accessible :id, :bkompetencijas, :bkompetencijas_attributes
accepts_nested_attributes_for :etapa
accepts_nested_attributes_for :bkompetencijas, :allow_destroy => true
embeds_many :bkompetencijas , class_name: 'Kompetencija', inverse_of: :paprasabk, :cascade_callbacks => true
end
#-----------------------------------------------
class Kompetencija
include Mongoid::Document
attr_accessible :id, :paprasabk, :paprasabk_attributes, :siekinys, :siekinys_attributes
accepts_nested_attributes_for :paprasa, :allow_destroy => true
accepts_nested_attributes_for :siekinys, :allow_destroy => true
embedded_in :paprasabk, class_name: 'Paprasa', inverse_of: :bkompetencijas
embeds_many :siekinys, class_name: 'Siekiny' , inverse_of: :kompetencija, :cascade_callbacks => true
end
#-----------------------------------------------
class Siekiny
include Mongoid::Document
field :matricos_ids, :type => Array, :default => []
attr_accessible :id, :kompetencija, :kompetencija_attributes, :matricos_ids
accepts_nested_attributes_for :kompetencija
embedded_in :kompetencija , class_name: 'Kompetencija', inverse_of: :siekinys
end
a form
<%= form_for [@paprasa],:html => { :multipart => true} do |f| %>
<%= f.fields_for :dkompetencijas do |form_inner| %>
<%= form_inner.fields_for :siekinys do |form_inner_inner| %>
<% @some_other_object.each_with_index do |d,indexx| %>
<%= check_box_tag "#{field_name_for_js(form_inner_inner, "matricos_ids")}[]", d.id, form_inner_inner.object.matricos_ids.include?(d.id), :id => "#{field_id_for_js(form_inner_inner, "matricos_id_") << d.id.to_s}" ).to_s %>
<% end %>
<% end %>
<% end %>
<% end %>
where
def field_id_for_js(builder, attribute)
"#{builder.object_name}[#{attribute.to_s.sub(/\?$/,"")}]".gsub(/\]\[|[^-a-zA-Z0-9:.]/, "_").sub(/_$/, "")
end
def field_name_for_js(builder, attribute)
"#{builder.object_name}[#{attribute.to_s.sub(/\?$/,"")}]"
end
it gives me ouput like this
<input id="paprasa_dkompetencijas_attributes_0_siekinys_attributes_0_matricos_id_506567916226f718e50000cb" name="paprasa[dkompetencijas_attributes][0][siekinys_attributes][0][matricos_ids][]" type="checkbox" value="506567916226f718e50000cb" />
<input id="paprasa_dkompetencijas_attributes_0_siekinys_attributes_1_matricos_id_506567916226f718e50000cb" name="paprasa[dkompetencijas_attributes][0][siekinys_attributes][1][matricos_ids][]" type="checkbox" value="506567916226f718e50000cb" />
and parameters
{"paprasa"=>{"dkompetencijas_attributes"=>{"0"=>{"siekinys_attributes"=>{"0"=>{"id"=>"505adfd26226f7555a000191", "matricos_ids"=>["506567916226f718e50000cb"]}, "1"=>{"id"=>"507558176226f75fa5000033"}, "2"=>{"id"=>"512f19626226f765c7000071"}, "3"=>{"id"=>"512f36456226f765c70000c8"}}, "id"=>"505adfd26226f7555a000190"}}}, "user_id"=>"5058514b6226f73ae4000064", "etapa_id"=>"505851516226f73ae4000065"}
this just creates new "siekiny" objects instead of updating existing ones. What I am doing wrong?