2014-09-30 41 views
0

我的表單中包含以下內容。通過這段代碼,我可以在頁面上動態添加divisions,sub_divisions和sub_sub_divisions。問題是我添加的sub_sub_divisions被保存到第一個子分區,即使它們正確顯示在視圖的其他子分區上。我不知道視圖和傳遞給控制器​​的錯誤之間發生了什麼。非常感謝。Rails nested_form gem更新錯誤的父數據

<%= nested_form_for @division do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 
    <table> 
    <tr> 
     <td> 
     <%= f.label t("name") %> 
     <%= f.text_field :name, class: 'form-control' %> 
     </td> 
     <td> 
     <%= f.label t("description") %> 
     <%= f.text_field :description, class: 'form-control' %> 
     </td> 
    </tr> 
    <tr><td><h3><%=t :sub_divisions %></h3></td></tr> 
    <tr> 
     <td colspan=4> 
     <table id="sub_divs" class="table table-condensed table-striped"> 
      <tr><th><%=t :name %></th><th><%=t :description %></th></tr> 
      <%= f.fields_for :sub_divs, :wrapper => false do |sub_div| %> 
      <tr class="fields"> 
       <td><%= sub_div.text_field :name, class: 'form-control' %></td> 
       <td><%= sub_div.text_field :description, class: 'form-control' %></td> 
       <td><%= sub_div.link_to_remove t("delete") %></td> 
      </tr> 
       <td colspan=3> 
       <table id="<%= 'sub_sub_divs' + sub_div.index.to_s %>"> 
        <tr><th><%=t :name %></th><th><%=t :description %></th></tr> 
        <%= sub_div.fields_for :sub_sub_divs, 
              :wrapper => false do |sub_sub_div| %> 
        <tr class="fields"> 
         <td><%= sub_sub_div.text_field :name, 
             class: 'form-control' %></td> 
         <td><%= sub_sub_div.text_field :description, class: 
                 'form-control' %></td> 
         <td><%= sub_sub_div.link_to_remove t("delete") %></td> 
         <td><%= sub_sub_div.hidden_field :id, 
           value: sub_sub_div.object.sub_div_id %></td> 

        </tr> 
        <% end %> 
       </table> 
       </td> 
      </tr> 
      <tr> 
       <td colspan=3 class="pull-right"> 
         <%= sub_div.link_to_add t("add") + 
          t("sub") + t('sub') + t('div'), :sub_sub_divs, 
        :data => { :target => "#"+"sub_sub_divs" +  
           #{sub_div.index.to_s}", id: sub_div.object.id} %> 
       </td> 
      </tr> 
      <% end %> 
     </table> 
     </td> 
    </tr> 
    <tr><td colspan=2 class="pull-right"> 
      <%= f.link_to_add t("add") + t("sub") + t('div'), 
      :sub_divs, :data => { :target => "#sub_divs"} %></td></tr> 
    <tr><td><%= f.submit t("update"), class: "btn btn-primary" %></td></tr> 
    </table> 
<% end %> 

回答

0

您的通話以外的

<%= f.fields_for :sub_divs, :wrapper => false do |sub_div| %> 

你應該遍歷sub_divs:

<%= @division.sub_divs.each do |sub_div| %> 

再經過每一個到fields_for調用作爲第二個參數:

<%= f.fields_for :sub_divs, sub_div, :wrapper => false do |sub_div| %> 

做同爲下一嵌套sub_sub_div最後:

<%= sub_sub_div.hidden_field :id, 
    value: sub_sub_div.object.sub_div_id %> 

...將擁有正確sub_div_id

+0

嗨迭戈,感謝您的答覆,但它並沒有爲我工作。我正在嘗試動態創建新行,並且迭代<%= @ division.sub_divs.each do | sub_div | %>失敗,錯誤消息未定義的方法'values_at'爲零:NilClass – Tiamon 2014-10-01 07:23:46

+0

我認爲'sub_divs'是'@ division'上的關係。你必須適應這條線,以便你有你的'sub_divs' – DiegoSalazar 2014-10-01 14:23:16

+0

再次感謝。我已經取得了一些進展,現在我知道哪裏出了問題。動態添加的字段不是先構建的。我試圖根據文檔中的建議做到這一點,如下所示:<%= sub_div.link_to_add t(「add」),:sub_sub_divs,:model_object => SubSubDiv.default,:data => {:target =>「 #「+」sub_sub_divs「+」#{sub_sub_div.index.to_s}「,id:sub_div.object.id}%>但是然後錯誤信息告訴我默認沒有定義 – Tiamon 2014-10-01 15:29:56