一直在谷歌上搜索,但我找不到任何帮助。我正在尝试将字段动态添加到我一直创建的嵌套表单中。目前的代码是:
控制器
if @jobstream.complex_attributes == []
@functional_group.functional_type_stores.each do |ftype|
if(Type.find(ftype.type_id).simple_or_complex == 'C' || Type.find(ftype.type_id).simple_or_complex == 'c' )
@jobstream.complex_attributes.build(:type_id => Type.find(ftype.type_id).id)
end
end
end表单
<%= f.fields_for :complex_attributes do |f_sa| %>
<tr>
<div class="field">
<td><%= @complexType[@counter].display_name %></td>
<td><%= @complexType[@counter].simple_or_complex %></td>
<%= f_sa.hidden_field :type_id%>
<td><%= f_sa.text_field :content, :size => 100 %></td>
</div>
</tr>
<% (@counter += 1) %>
<% end %>我需要的是一种能够动态地向复杂属性添加另一个文本字段的方法,同时为复杂属性创建一个惟一的id,并保留您希望向其添加更多字段的复杂属性的hidden_field type_id值。
为了更好地解释这一点,请快速参考,请转到这里并点击create -我基本上希望能够有一个复杂属性的列表,在它们旁边有一个按钮,允许您为这个属性添加更多的文本字段。
发布于 2012-02-22 12:30:30
由于不能向现有模型(比db中的字段更多)添加更多的属性对,因此您可能必须创建另一个由@作业流模型拥有的模型。然后,这个新模型将存储属性,并且必须使用@ This流模型进行调用。
在表单中,您必须远程添加字段,为了避免错误,您需要使用Model.create,而不是Model.new(因为嵌套表单否则会崩溃)。此外,您还需要为每个添加的字段添加新的fields_for标记。
我想那是为了铁轨。
您还可以尝试将这些新属性存储为指定字段中的散列-例如,您可以拥有以下字段
<%= fields_for :complex_attributes, do |f| %>
<%= f.text_field :attr_foo %>
<%= f.text_field :attr_new %>
<%= f.text_field :another_attr_new %>...然后,在更新表单之后,您可以使用Model.complex_attributes.each_pair do |key, value|检索这些属性--这里的问题是添加更多字段,您可能需要对这些字段进行硬编码,而且必须为每个新字段分配新的键。
但这是可以做到的。我猜:)
发布于 2012-02-22 11:23:34
https://stackoverflow.com/questions/9393559
复制相似问题