Non riesco a vedere un modo decente per farlo attraverso i modi forniti da Rails, almeno non in -v3.2.14
@Sheharyar Naseer fa riferimento all'hash delle opzioni che può essere utilizzato per risolvere il problema, ma non per quanto posso vedere nel modo in cui sembra suggerire.
Ho fatto questo =>
<%= 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 %>
o
<%= 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 %>
Nel mio caso g.object_name
restituisce una stringa come questa "gallery_set[blog_posts_attributes][2]"
per il terzo campo renderizzato, quindi abbino semplicemente l'indice in quella stringa e lo uso.
In realtà un modo più freddo (e forse più pulito?) Per farlo è passare un lambda e chiamarlo per incrementare.
# /controller.rb
index = 0
@incrementer = -> { index += 1}
E nella vista
<%= 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 %>