Я не вижу достойного способа сделать это с помощью способов, предоставляемых Rails, по крайней мере, не в -v3.2.14.
@Sheharyar Naseer ссылается на хэш опций, который можно использовать для решения проблемы, но не настолько, насколько я могу судить, как он, кажется, предлагает.
Я сделал это =>
<%= 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 %>
или
<%= 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 %>
В моем случае g.object_name
возвращает такую строку "gallery_set[blog_posts_attributes][2]"
для третьего отображаемого поля, поэтому я просто сопоставляю индекс в этой строке и использую его.
На самом деле более прохладный (и, может быть, более чистый?) Способ сделать это - передать лямбду и вызвать ее для увеличения.
# /controller.rb
index = 0
@incrementer = -> { index += 1}
И в представлении
<%= 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 %>