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 の使用- バニラの JavaScript または jquery を使用してこれらに番号を付けることができることはわかっています。コードを理解しやすくするだけでなく、ネストされたフィールドについてもっと学びたいと思っています。
  • 変数のインクリメント- 繰り返しになりますが、ネストされたフィールドのコンテキストについてさらに学び、ネストされたフィールドに番号を付けるより動的で具体的な方法があるかどうかを確認したいと思います。

私がすでに知っていること:

  • の現在のインスタンスにアクセスできgizmoますf.object
  • レコードがまだ保存されていないため、アクションにf.object.widgetアクセスできませんnew
4

2 に答える 2

1

そうですね、近かったと思います。私はすべての部品を持っていたので、それらを組み立てる必要がありました。フォームビルダーのオブジェクトにアクセスできたので、フォームビルダーへの関連付けの配列内でその場所を見つけることができました。@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 に答える