Bunu Rails tarafından sağlanan yollarla yapmanın iyi bir yolunu göremiyorum, en azından -v3.2.14'te değil.
@Sheharyar Naseer, sorunu çözmek için kullanılabilecek, ancak onun önerdiği şekilde görebildiğim kadarıyla olmayan seçenekler karmasına gönderme yapıyor.
Bunu ben yaptım =>
<%= 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 %>
veya
<%= 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 %>
Benim durumumda , oluşturulan üçüncü alan için bunun g.object_name
gibi bir dize döndürür, bu "gallery_set[blog_posts_attributes][2]"
yüzden bu dizedeki dizini eşleştiriyorum ve kullanıyorum.
Aslında bunu yapmanın daha soğuk (ve belki daha temiz) bir yolu bir lambda geçirip onu artışa çağırmaktır.
# /controller.rb
index = 0
@incrementer = -> { index += 1}
Ve görünümde
<%= 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 %>