嵌套的Rails表单并使用label_tag,checkbox_tag和其他form_tag函数

时间:2010-01-28 08:22:05

标签: ruby-on-rails nested-forms

在Ruby on Rails中的常规表单中,如果使用form_for构建模型,作为API docs状态,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 个答案:

答案 0 :(得分: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 %> )并将块变量与符号一起传递:

{{1}}

当然,您必须自己处理“收养要约”登录。