Tôi không thể thấy một cách phù hợp để thực hiện điều này thông qua các cách được Rails cung cấp, ít nhất là không phải trong v3.2.14
@Sheharyar Naseer tham chiếu đến băm tùy chọn có thể được sử dụng để giải quyết vấn đề nhưng không xa như tôi thấy dường như đề nghị.
Tôi đã làm điều này =>
<%= 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 %>
hoặc
<%= 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 %>
Trong trường hợp của tôi g.object_name
trả về một chuỗi như "gallery_set[blog_posts_attributes][2]"
này cho lĩnh vực thứ ba trả lại vì vậy tôi chỉ phù hợp với các chỉ số trong chuỗi đó và sử dụng nó.
Thực ra cách làm mát hơn (và có thể sạch hơn?) Là chuyển một lambda và gọi nó là tăng dần.
# /controller.rb
index = 0
@incrementer = -> { index += 1}
Và trong giao diện
<%= 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 %>
Tôi muốn + một trong những đường ray chính ... Hãy xem xét một trường hợp cho cái này. –