繁体   English   中英

Rails中的嵌套表单

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM