嵌套表单循环额外运行一次

问题描述

我有一个 product_form,其中 product_categories 是一个嵌套表单。这是一个部分,因此添加和编辑表单是相同的。

 <%= f.fields_for :product_categories do |c| %>
      <div class="custom-select">
        <div class="select-tags">

          <% if [email protected]_categories.present? %>
            <%= select_tag :main_category,options_from_collection_for_select(MainCategory.all,:id,:title,selected: (@main_category || nil)),{class: "select2 buyer_select2 js-example-basic-single categories-select main-select",onchange: "",prompt: "Select Main Category"} %>

            <%= select_tag :'category','',{class: "select2 buyer_select2 js-example-basic-single categories-select category-select",prompt: "Select Category"} %>

            <%= c.select :sub_category_id,{class: "select2 buyer_select2 js-example-basic-single categories-select ",prompt: "Select Sub Category"} %>

            <%= c.link_to_remove "Remove" %>

          <% else %>
            <% if c.object.sub_category.present? %>

              <%= select_tag :main_category,selected: ( c.object.sub_category.category.main_category.id || nil)),{class: "categories-select main-select",prompt: "Select Main Category"} %>

              <% @categories = Category.where(main_category_id: c.object.sub_category.category.main_category.id) %>

              <%= select_tag :'category',options_from_collection_for_select(@categories,selected: ( c.object.sub_category.category.id || nil)),{class: "category-select",prompt: "Select Category"} %>

              <% @sub_categories = SubCategory.where(category_id: c.object.sub_category.category.id) %>

              <%= c.select :sub_category_id,options_from_collection_for_select(@sub_categories,"id","title",selected: ( c.object.sub_category.id || nil)),prompt: "Select something" %>

              <%= c.link_to_remove "Remove" %>
            <% end %>
          <% end %>

        </div>
      </div>
    <% end %>
  <%= f.link_to_add 'Add Category',:product_categories,class: 'icon-img' %>

但是,该表单不适用于编辑。 nested_form 显示已选择的下拉列表。但它会额外运行一次。如果添加了 2 个类别,它将运行 3 次。我得到了绑定撬的精确计数。我无法理解这一点。因此,我不得不在 else 块中放置另一个 if 条件,因此添加类别按钮不起作用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)