No veo una forma decente de hacer esto a través de las formas proporcionadas por Rails, al menos no en -v3.2.14
@Sheharyar Naseer hace referencia a las opciones hash que se pueden usar para resolver el problema, pero no tanto como puedo ver en la forma en que parece sugerir.
Hice esto =>
<%= 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 %>
En mi caso, g.object_name
devuelve una cadena como esta "gallery_set[blog_posts_attributes][2]"
para el tercer campo renderizado, así que simplemente hago coincidir el índice en esa cadena y lo uso.
En realidad, una forma más fresca (¿y tal vez más limpia?) De hacerlo es pasar un lambda y llamarlo para incrementar.
# /controller.rb
index = 0
@incrementer = -> { index += 1}
Y en la 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 %>