Não consigo ver uma maneira decente de fazer isso através das formas fornecidas pelo Rails, pelo menos não em -v3.2.14
@Sheharyar Naseer faz referência às opções de hash que podem ser usadas para resolver o problema, mas não tanto quanto posso ver da maneira que ele parece sugerir.
Eu fiz isso =>
<%= 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 %>
No meu caso, g.object_name
retorna uma string como esta "gallery_set[blog_posts_attributes][2]"
para o terceiro campo renderizado, então eu apenas combino o índice nessa string e o uso.
Na verdade, uma maneira mais legal (e talvez mais limpa?) De fazer isso é passar um lambda e chamá-lo para incrementar.
# /controller.rb
index = 0
@incrementer = -> { index += 1}
E na 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 %>