2012-02-22 232 views
2

一直在搜索,但我找不到任何幫助。我試圖動態添加字段到我一直在創建的嵌套窗體。當前的代碼是: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 %> 

我需要的是能夠另一個文本字段動態地添加到複雜的屬性,同時創造一個方法複雜屬性的唯一標識,並且還保留您希望添加更多字段的複雜屬性的值hidden_field type_id

想要快速參考,希望解釋這個更好去here和命中創建jobstream - 我基本上想要能夠擁有一個複雜的屬性列表旁邊的按鈕,允許您添加更多的文本字段爲相同的屬性。

回答

0

由於您無法將更多屬性對添加到現有模型(超過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| 問題檢索這些屬性這裏是添加更多字段,您可能需要對這些字段進行硬編碼,並且還必須爲每個新字段分配新密鑰。

雖然它可以做到。我猜:)

+0

聽起來不錯,我會試試看 – 2012-02-22 12:56:41