Rails 带有 Bootstrap 选项卡的嵌套字段

Rails Nested Fields with Bootstrap Tabs

尝试在 rails 中创建嵌套表单,但使用 bootstrap 选项卡使其可折叠。
我目前有以下内容:

_form.html.rb

  <%= f.fields_for :register_members do |rm| %>

    <%= render 'register_member_fields', f: rm %>
  <% end %>

  <div class="links">
  <%= link_to_add_association "Add Registration", f, :register_members, class: "btn btn-success btn-sm text-white" %>
  </div>

_register_member_fields.html.erb

<div class="nested-fields">
  <div class="panel panel-default fields">

    <div class="panel-heading" role="tab" id="heading<%= f.index.to_s %>">
      <h4 class="panel-title">
        <a data-toggle="collapse" href="#tabCollapse<%= f.index.to_s %>" aria-expanded="true" aria-controls="tabCollapse<%= f.index.to_s %>">
            Registration
            <span class="panel-icon"></span>
        </a>
      </h4>
    </div><!-- End .panel-heading -->

    <div id="tabCollapse<%= f.index.to_s %>" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="heading<%= f.index.to_s %>">
      <div class="panel-body">
        <div class="field">
            <%= f.label "Name", class: "input-desc" %>
            <%= f.text_field :name, class: "form-control" %>
        </div>
        <div class="field">
            <%= f.label :email, class: "input-desc" %>
            <%= f.email_field :email, class: "form-control" %>
        </div>
        <div class="field">
            <%= f.hidden_field :_destroy %>
            <%= link_to_remove_association("Remove Registration", f) %>
        </div>
      </div><!-- End .panel-body -->
    </div><!-- End .panel-collapse -->  

  </div><!-- End .panel -->
</div>  

显然,嵌套字段如何使用 gem cocoon 工作,这将创建一个新的 _register_member_field,使用相同的 id 进行折叠。这意味着单击任何面板标题只会折叠并打开其中一个嵌套表单。
关于如何让它正常工作有什么建议吗?

好的,据我在 rails 和 JQUERY 中所知道的 - 如果您将任意 ID 粘贴到情况中而不需要支持它的 DSL 或模型 - 就是这样代码异味(当你为 hack 做大量工作时,通常其他程序员只会使用另一种方法以通用方式做同样的事情)。

我认为您所做的实质上是尝试使用 Rails 代码编写 HTML 代码以将 ID# 塞入以供 JQUERY 代码使用。

既然你已经有了使用 JQUERY 的 cocoon,为什么不使用更好的 JQUERY 选择器 (google '.selector') 来定位你想要的 CSS/HTML 元素... 如果您知道 DOM,那么您在这方面做得很好。我建议定位“.child”。还有一些做主题的技巧...Link。这减轻了对唯一值的需求,因为您只是在使用已经存在的值。

这里最漂亮的部分是默认情况下茧的图案已经针对 nested-fields 的 "parent"。这给了你一个例子来说明它是如何工作的——特别是如果你阅读了关于回调的 cocoon 文档。

基本上,您需要在每个特定折叠周围放置相当于 nested-fields 的手风琴(选择任何一个名称并将其用于所有字段 - 例如:'accordion-fields')然后指向您的 JQUERY 用于手风琴,用于点击以 'accordion-fields' 的父级为目标。

奖金,这是动态定位手风琴字段的示例 - http://demos.jquerymobile.com/1.4.3/collapsible-dynamic/#&ui-state=dialog

我在几个月前完成了一次 - 但我需要一些时间来剖析它 - 只是将其张贴在这里,因为这是技术而且它比实际为您编写整个代码要快。如果您在使用 JQUERY.

实施 parent/child 策略时遇到任何障碍,请告诉我