【问题标题】:Rails nested_form gem updates wrong parent dataRails nested_form gem 更新错误的父数据
【发布时间】:2014-09-30 14:27:01
【问题描述】:

我的其中一种表格中有以下内容。使用此代码,我可以在页面上动态添加部门、sub_divisions 和 sub_sub_divisions。问题是我添加的 sub_sub_divisions 保存到第一个 sub_division 中,即使它们正确显示在视图上的其他 sub_divisions 上。我不知道视图和传递给控制器​​以产生此错误的内容之间发生了什么。非常感谢。

<%= 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 %>

【问题讨论】:

    标签: ruby-on-rails forms gem nested


    【解决方案1】:

    在您的电话之外

    <%= 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

    【讨论】:

    • 嗨 Diego,感谢您的回复,但它对我没有用。我正在尝试动态创建新行并且迭代 失败,错误消息 undefined method `values_at' for nil:NilClass
    • 我假设sub_divs@division 的关系。您必须使该行适应您的sub_divs
    • 再次感谢。我在这方面取得了一些进展,现在我知道哪里出了问题。动态添加的字段不是首先构建的。我尝试根据文档上的建议这样做: SubSubDiv.default, :data => { :target => " #"+"sub_sub_divs" + "#{sub_sub_div.index.to_s}", id: sub_div.object.id} %> 但是错误信息告诉我默认没有定义
    猜你喜欢
    • 1970-01-01
    • 2018-08-19
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多