j'ai un modèle simpleen utilisant fields_for en plusieurs endroits
class Ad < ActiveRecord::Base
has_many :ad_items
end
class AdItem < ActiveRecord::Base
belongs_to :ad
end
J'ai une « annonces/nouvelle » vue, qui me montre la forme pour la création de la nouvelle annonce et en ajoutant quelques articles à ce
le code .html.erb est comme un suivant:
<% form_for @ad, do |ad_form| %>
<!-- some html -->
<% ad_form.fields_for :ad_items do |f| %>
<%= f.text_area "comment", :class => "comment", :rows => "5" %>
<% end %>
<!-- some other html -->
<% ad_form.fields_for :ad_items do |f| %>
<% render :partial => "detailed_item_settings", :locals => {:f => f} %>
<% end %>
<% end %>
Lorsque l'annonce a un article ...
def new
@ad = session[:user].ads.build
# Create one item for the ad. Another items will be created on the
# client side
@ad.ad_items.build
# standard stuff ...
end
... résultant HTML, ressemblera à ceci:
<form ... >
<!-- some html -->
<textarea id="ad_items_attributes_0_comment" name="ad[ad_items_attributes][0][comment]" />
<!-- some other html -->
<!-- "detailed_item_settings" partial's content -->
<textarea id="ad_ad_items_attributes_1_desc" name="ad[ad_items_attributes][1][desc]" />
<!-- end -->
</form>
Comme il est dit dans le code, j'utilise la méthode fields_for deux fois, en raison de la structure HTML, que je dois suivre
Pour le deuxième appel "fields_for", l'index de "item" est déjà 1, et non 0, comme je l'espère.
Il est comme, en appelant la méthode que « fields_for », un certain compteur interne est incrémenté ...
Mais c'est un peu étrange comportement ...
J'ai essayé de définir: index => 0 pour fields_for, mais tous restent les mêmes ...
Qu'est-ce qui ne va pas ici?
Merci, mec! : child_index était la clé! – AntonAL