Je ne vois pas de moyen décent de le faire à travers les moyens fournis par Rails, du moins pas dans -v3.2.14
@Sheharyar Naseer fait référence aux options de hachage qui peuvent être utilisées pour résoudre le problème, mais pas aussi loin que je puisse voir dans la manière qu'il semble suggérer.
J'ai fait ça =>
<%= f.fields_for :blog_posts, {:index => 0} do |g| %>
<%= g.label :gallery_sets_id, "Position #{g.options[:index]}" %>
<%= g.select :gallery_sets_id, @posts.collect { |p| [p.title, p.id] } %>
<%# g.options[:index] += 1 %>
<% end %>
ou
<%= f.fields_for :blog_posts do |g| %>
<%= g.label :gallery_sets_id, "Position #{g.object_name.match(/(\d+)]/)[1]}" %>
<%= g.select :gallery_sets_id, @posts.collect { |p| [p.title, p.id] } %>
<% end %>
Dans mon cas, g.object_name
renvoie une chaîne comme celle-ci "gallery_set[blog_posts_attributes][2]"
pour le troisième champ rendu afin que je fasse simplement correspondre l'index de cette chaîne et l'utilise.
En fait, une façon plus fraîche (et peut-être plus propre?) De le faire est de passer un lambda et de l'appeler à incrémenter.
# /controller.rb
index = 0
@incrementer = -> { index += 1}
Et le dans la vue
<%= f.fields_for :blog_posts do |g| %>
<%= g.label :gallery_sets_id, "Position #{@incrementer.call}" %>
<%= g.select :gallery_sets_id, @posts.collect { |p| [p.title, p.id] } %>
<% end %>