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

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

Например:

<% 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 имеет уникальное значение, если есть несколько дочерних элементов.

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

1 Ответ

1 голос
/ 28 января 2010

См. документы для 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 %>

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

...