0

我正在构建具有has_many,belongs_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 %>

如何以编程方式gizmo确定widget.gizmos. 这样每个输出看起来像:

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

我想避免的:

  • 使用 Javascript - 我知道我可以用 vanilla javascript 或 jquery 对这些进行编号。我想要一个纯粹的 ruby​​/rails 解决方案,这样不仅代码更容易理解,而且我希望更多地了解嵌套字段。
  • 增加变量- 同样,我想更多地了解嵌套字段的上下文,看看是否有更动态和具体的方法来为嵌套字段编号。

我已经知道的:

  • gizmo我可以访问通过的当前实例f.object
  • 我无法访问f.object.widgetnew操作,因为尚未保存记录
4

2 回答 2

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 %>
于 2013-04-01T20:03:00.773 回答
0

我相信您的部分中有一个可用的变量是“PARTIAL_NAME_counter”,即

gizmo_fields_counter

请参阅http://databasically.com/2009/04/09/rails-render-partial-counters-displaying-a-records-index/

于 2013-04-01T19:36:22.110 回答