Вложенные формы Rails и использование label_tag, checkbox_tag и других функций form_tag

В обычных формах в Ruby on Rails при использовании form_for для построения модели, как указано в документах API, form_for не создает эксклюзивную область, и можно использовать функции form_tag в форме form_for.

Например:

<% form_for :person, @person, :url => { :action => "update" } do |f| %>
  First name: <%= f.text_field :first_name %>
  Admin?    : <%= check_box_tag "person[admin]", @person.company.admin? %>
<% end %>

Однако во вложенной форме метки и поля имеют имена, которые автоматически генерируются Rails, чтобы быть связанными с данной вложенной моделью и не перекрываться, если одновременно создается несколько вложенных моделей. Можно ли по-прежнему использовать функции form_tag?

Я хотел бы сделать что-то вроде этого:

<% person_form.fields_for :children do |child_form| %>
Name: <%= child_form.text_field :name %>

Give up for Adoption?: <%= check_box_tag "adoption_" + child_form_index, false %>
<% end %>

Однако я не знаю, как получить доступ к индексу child_form, чтобы убедиться, что check_box_tag имеет уникальное значение, если есть несколько дочерних элементов.

Возможно ли то, что я пытаюсь сделать?


person William Jones    schedule 28.01.2010    source источник


Ответы (1)


См. документы для fields_for в разделе "один ко многим".

Мне кажется, что в основном вы можете просто использовать each (или each_with_index) и передать переменную блока вместе с символом:

   <% form_for @person, :url => { :action => "update" } do |person_form| %>
    ...
    <% @person.children.each_with_index do |child, index| %>
        <% person_form.fields_for :children, child do |children_fields| %>
          Name: <%= children_fields.text_field :name %>
         Give up for Adoption?: <%= check_box_tag "adoption_" + index, false %>
        <% end %>
    <% end %>
  <% end %>

Конечно, вам придется обрабатывать логин «предложение об усыновлении» самостоятельно.

person tfwright    schedule 28.01.2010