2013-04-01 32 views
0

我建立嵌套字段与has_manybelongs_to关系就像这样:如何编号嵌套字段?

app/controllers/widgets_controller.rb

def new 
    @widget = Widget.new 
    3.times { @widget.gizmos.build } 
end 

app/views/widgets/_form.html.erb

<%= form_for @widget do |f| %> 
    ... 
    <%= f.fields_for :gizmos do |b| %> 
    <%= render 'gizmo_fields', f: b %> 
    <% end -%> 
    ... 
<% end -%> 

app/views/widgets/_gizmo_fields.html.erb

<%= f.label :name "Gizmo -NUMBER-" %> 
<%= f.text_field :name %> 

我如何编程确定数量gizmowidget.gizmos总数。使得每个输出会是什么样子:

Gizmo 1 |_____text_____| 
Gizmo 2 |_____text_____| 
Gizmo 3 |_____text_____| 

我想什么来避免:

  • 使用JavaScript - 我知道我可以用香草JavaScript或jQuery的数量的这些。我想要一个纯ruby/rails解决方案,这样不仅代码更容易遵循,但我希望能够更多地了解嵌套字段。
  • 增量变量 - 再次,我想了解更多关于嵌套字段的上下文,看看是否有更具动态和具体的方法来编号嵌套字段。

我已经知道:

  • 我可以通过f.object
  • 访问gizmo当前实例我不能在new行动访问f.object.widget,因为记录尚未保存

回答

1

嗯,我想我很接近。我拥有所有的东西,只是把它们放在一起。因为我可以访问formbuilder的对象,我能找到其公司章程的阵列中的位置到@widget

<%= f.fields_for :gizmos do |b| %> 
    <%= render 'gizmo_fields', f: b, index: @widget.gizmos.index(b.object) + 1 %> 
<% end -%> 

app/views/widgets/_gizmo_fields.html.erb

<%= f.label :name "Gizmo #{index}" %> 
<%= f.text_field :name %>