cocoon link_to_add_association 添加空关联字段 rails 4 erb

Posted

技术标签:

【中文标题】cocoon link_to_add_association 添加空关联字段 rails 4 erb【英文标题】:cocoon link_to_add_association adds empty association fields rails 4 erb 【发布时间】:2015-03-07 16:25:27 【问题描述】:

我在我的 rails 4.1 + activeadmin 应用程序中使用 cocoon gem (1.2.6)。 link_to_add_association 在 ERB 表单中添加了带有 new 的空字段。请参考下面的输入ID

<input id="lease_information_lease_units_attributes_new_lease_units_property_name" type="text" name="lease_information[lease_units_attributes][new_lease_units][property_name]">

当我点击 link_to_add_association 时会创建带有 id 的字段。

<input id="lease_information_lease_units_attributes_1420800589434_property_name" type="text" name="lease_information[lease_units_attributes][1420800589434][property_name]">

我的lease_informations/_lease_units.html.erb 表格:

<%= javascript_include_tag :cocoon %>

<div id='lease_units'>
  <%= f.semantic_fields_for :lease_units do |lease_unit| %>
    <%= render 'lease_unit_fields', f: lease_unit %>
  <% end %>  
  <div class='links'>
    <%= link_to_add_association image_tag("icon-new.png", height: '18', width: '18'), f, :lease_units, title: "Add Unit" %>
  </div>
</div>

部分_lease_unit_fields.html.erb:

<div class='nested-fields'>
  <table>
    <tbody>
      <tr >
        <td class="col col-unit_type">
          <%= f.text_field :unit_type %>
        </td>
        <td class="col col-unit">
          <%= f.text_field :unit %>
        </td>
        <td class="col col-action">
          <%= link_to_remove_association image_tag("icon-remove.png", height: '18', width: '18'), f, title: "Remove Unit" %>
        </td>
      </tr>
    </tbody>
  </table>
</div>

我的管理员/lease_information.rb

ActiveAdmin.register LeaseInformation do
  menu false
  controller do
    def new
      @page_title="Data Entry Form"
      @lease_information = LeaseInformation.new
      # @lease_information.lease_units.build
    end
  end
  form do |f|
    tabs do
      tab 'Units' do
        table_for resource.lease_units do
         column :unit_type
         column :unit
        end
        render "lease_units", f: f  # rendering the partial here
      end
    f.actions do
      f.action :submit, label: "Submit"
      f.cancel_link(admin_jobs_path)
    end
  end
end

因此,嵌套字段没有保存在数据库中。谁能帮我解决这个问题?

【问题讨论】:

能否请您张贴您要添加lease_units partial的主要表格 在帖子中添加了主表单。请参考 请在admin/lease_information.rb 文件中移动以下行,我认为这将解决您的问题。 ` ` @ManiDavid 你得到解决方案了吗? 【参考方案1】:

我认为将以下代码从 lease_informations/_lease_units.html.erb 移动到 admin/lease_information.rb 文件将解决您的问题。

<div class='links'>
  <%= link_to_add_association image_tag("icon-new.png", height: '18', width: '18'), f, :lease_units, title: "Add Unit" %>
</div>

如果您遇到任何错误或需要任何帮助,请恢复。

【讨论】:

试过了,但是这些字段附带了 new,请提供任何其他解决方案。 admin/lease_information.rb form do |f| tabs do tab 'Units' do f.semantic_fields_for :lease_units do |lease_unit| # render "lease_units", f: f render 'lease_unit_fields', f: lease_unit end link_to_add_association image_tag("icon-new.png", height: '18', width: '18'), f, :lease_units, title: "Add Unit" end end end【参考方案2】:

如果保存不起作用,听起来您在父模型中缺少所需的accepts_nested_attributes_for :lease_units

大数字而不是新数字是正确的行为,每个新孩子都必须是不同的,我们不能称每个新孩子为新的,所以我们选择一个大的、唯一且不存在的数字,这样rails就会知道它是一个新孩子。

【讨论】:

app/models/lease_information.rb 类 LeaseInformation 您看到了什么错误?某些验证失败了吗? new 是 akward,不一定是错的。在您的代码中,lease_units.build 被注释掉了,那么新元素是在哪里生成的?

以上是关于cocoon link_to_add_association 添加空关联字段 rails 4 erb的主要内容,如果未能解决你的问题,请参考以下文章

cocoon link_to_add_association 添加空关联字段 rails 4 erb

Cocoon gem,编辑或错误时未建立深度关联

一对多 添加表单 cocoon

使用 COCOON Rails 3 在动态字段中自动完成 Jquery

使用 simple_form 和 cocoon 时无法让 select2 工作

Cocoon 自动完成模态填充动态字段两次