2013-04-01 3 views
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 действий, поскольку запись еще не сохранена

ответ

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 %> 
Смежные вопросы