Saya tidak dapat melihat cara yang layak untuk melakukan ini melalui cara-cara yang disediakan oleh Rails, setidaknya tidak di -v3.2.14
@Sheharyar Naseer membuat referensi ke opsi hash yang dapat digunakan untuk memecahkan masalah tetapi tidak sejauh yang saya lihat dari cara yang tampaknya dia sarankan.
Saya melakukan ini =>
<%= 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 %>
atau
<%= 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 %>
Dalam kasus saya g.object_name
mengembalikan string seperti ini "gallery_set[blog_posts_attributes][2]"
untuk bidang ketiga yang diberikan jadi saya hanya mencocokkan indeks dalam string itu dan menggunakannya.
Sebenarnya cara yang lebih keren (dan mungkin lebih bersih?) Untuk melakukannya adalah dengan melewatkan lambda dan memanggilnya ke increment.
# /controller.rb
index = 0
@incrementer = -> { index += 1}
Dan dalam tampilan
<%= 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 %>