Ich sehe keinen vernünftigen Weg, dies durch die von Rails bereitgestellten Wege zu tun, zumindest nicht in -v3.2.14
@Sheharyar Naseer verweist auf den Options-Hash, der zur Lösung des Problems verwendet werden kann, aber nicht so weit ich sehen kann, wie er es vorzuschlagen scheint.
Ich habe das gemacht =>
<%= 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 %>
oder
<%= 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 %>
In meinem Fall wird g.object_name
eine solche Zeichenfolge "gallery_set[blog_posts_attributes][2]"
für das dritte gerenderte Feld zurückgegeben, sodass ich nur mit dem Index in dieser Zeichenfolge übereinstimme und ihn verwende.
Eine kühlere (und vielleicht sauberere?) Methode besteht darin, ein Lambda zu übergeben und es zum Inkrementieren aufzurufen.
# /controller.rb
index = 0
@incrementer = -> { index += 1}
Und das in der Aussicht
<%= 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 %>