4

我无法使用嵌套属性创建多个模型对象。我拥有的 .erb 表格:

<%= f.fields_for :comments do |c| %>
  <%= c.text_field :text %>
<% end %>

正在生成如下所示的输入字段:

<input type="text" name="ad[comments_attributes][0][text]" />
<input type="text" name="ad[comments_attributes][1][text]" />
<input type="text" name="ad[comments_attributes][2][text]" />

当我真正想要的是它看起来像这样时:

<input type="text" name="ad[comments_attributes][][text]" />
<input type="text" name="ad[comments_attributes][][text]" />
<input type="text" name="ad[comments_attributes][][text]" />

使用表单助手,我怎样才能让表单像第二个示例中那样创建一个哈希数组,而不是像第一个示例中那样创建一个哈希哈希?

4

1 回答 1

7

您可以将 text_field_tag 用于此特定类型要求。这个 FormTagHelper 提供了许多创建表单标签的方法,这些方法不像 FormHelper 那样依赖于分配给模板的 Active Record 对象。相反,您手动提供名称和值。

如果您将它们全部命名为相同的名称并将 [] 附加到末尾,如下所示:

 <%= text_field_tag "ad[comments_attributes][][text]" %>
 <%= text_field_tag "ad[comments_attributes][][text]" %>
 <%= text_field_tag "ad[comments_attributes][][text]" %>

您可以从控制器访问这些:

comments_attributes = params[:ad][:comments_attributes] # 这是一个数组

上面的 field_tag html 输出如下所示:

<input type="text" name="ad[comments_attributes][][text]" />
<input type="text" name="ad[comments_attributes][][text]" />
<input type="text" name="ad[comments_attributes][][text]" />

如果您在方括号之间输入值,rails 会将其视为哈希:

 <%= text_field_tag "ad[comments_attributes][1][text]" %>
 <%= text_field_tag "ad[comments_attributes][2][text]" %>
 <%= text_field_tag "ad[comments_attributes][3][text]" %>

控制器会将其解释为带有键“1”、“2”和“3”的散列。我希望我能正确理解你需要什么。

谢谢

于 2013-06-06T18:08:16.870 回答