[英]Nested forms in Rails
一直在谷歌搜索,但是对此我找不到任何帮助。 我正在尝试将字段动态添加到我一直在创建的嵌套表单中。 当前代码是:
调节器
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
值。
为了有一个快速参考,希望可以更好地解释这一点,请点击这里并创建工作流-我基本上希望能够有一个复杂属性的列表,旁边有一个按钮,允许您为该相同属性添加更多文本字段。
由于您不能向现有模型添加更多的属性对(不能超过db中的字段),因此您可能必须创建@jobstream模型拥有的另一个模型。 然后,该新模型将存储属性,并且必须使用@jobstream模型进行调用。
在表单中,您必须远程添加字段,并且为了避免错误,您将需要使用Model.create而不是Model.new(否则嵌套表单会崩溃)。 另外,您需要为每个添加的字段添加新的fields_for标记。
我想那是Rails的方式。
您还可以尝试将这些新属性存储为指定字段中的哈希值-例如,您可以将诸如
<%= 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|
来检索这些属性Model.complex_attributes.each_pair do |key, value|
这里的问题是添加更多的字段,您可能需要对这些字段进行硬编码,而且,必须为每个新字段分配新的密钥。
可以做到的。 我猜 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.