No veo una manera decente de hacer esto a través de los modos proporcionados por Rails, al menos no en -v3.2.14
@Sheharyar Naseer hace referencia al hash de opciones que se puede usar para resolver el problema, pero no tan lejos 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 rendí así que sólo coincidir con el índice en esta cadena y usarlo
en realidad una forma más frío (y tal vez más limpio?) Para hacerlo es pasar un lambda y lo llaman a incrementar.
# /controller.rb
index = 0
@incrementer = -> { index += 1}
Y la 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 %>
que había + uno en los rieles principales ... Sigue encontrando un caso para este también. –