Я не бачу пристойного способу зробити це через шляхи, передбачені Рейлами, принаймні не через -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 %>