Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将类别子类别关系列至第n级_Ruby On Rails_Ruby On Rails 4_Parent Child_Rails Activerecord - Fatal编程技术网

Ruby on rails 将类别子类别关系列至第n级

Ruby on rails 将类别子类别关系列至第n级,ruby-on-rails,ruby-on-rails-4,parent-child,rails-activerecord,Ruby On Rails,Ruby On Rails 4,Parent Child,Rails Activerecord,我有一个categories表,其中有一个parent_id列,下面是categories模型 class Category < ActiveRecord::Base has_many :subcategories, :class_name => "Category", :foreign_key => :parent_id, :dependent => :destroy has_one :parent, :class_name => "Category",

我有一个categories表,其中有一个parent_id列,下面是categories模型

class Category < ActiveRecord::Base

  has_many :subcategories, :class_name => "Category", :foreign_key => :parent_id, :dependent => :destroy
  has_one :parent, :class_name => "Category", :primary_key => :parent_id, :foreign_key => :id
end

您可以制作包含重复标记的分部,例如:

<% @categories.each do |category| %>
        <ul>
          <% if category.parent_id.blank? %>
            <li class="big-bold"><%= category.name %> <%= link_to "Edit", edit_admin_category_path(category), :class => "btn btn-primary btn-xs" %> <%= link_to "Delete", admin_category_path(category), :method => 'delete', :class => "btn btn-danger btn-xs", data: { confirm: 'Are you sure?' } %>
              <% if category.subcategories.present? %>
                <%= render partial: 'subcategory', locals: {subcategories: category.subcategories} %>
              <% end %>
                </ul>
              <% end %>
            </li>
          <% end %>
        </ul>
  <% end %>
<ul>
  <% subcategories.each do |sub| %>
    <li class="top-clear"><%= sub.name %> <%= link_to "Edit", edit_admin_category_path(sub), :class => "btn btn-primary btn-xs" %> <%= link_to "Delete", admin_category_path(sub), :method => 'delete', :class => "btn btn-danger btn-xs", data: { confirm: 'Are you sure?' } %>
  <% if sub.subcategories.present? %>
    <%= render partial: 'subcategory', locals: {subcategories: sub.subcategories} %>
  <% end %>

</li>
  <% end %>
</ul>

可能是因为你在懒洋洋地加载记录。不,我在使用这个,
@categories=Category.select('id,name,parent\u id,slug')。包括(:subcategories)
你能发布有问题的数据库查询日志吗?我会说这是因为
Category.subcategories.present?
调用视图。我想如果您在模型中添加
includes::subcategories
has\u many:subcategories
,可以减少查询数量。
<% @categories.each do |category| %>
        <ul>
          <% if category.parent_id.blank? %>
            <li class="big-bold"><%= category.name %> <%= link_to "Edit", edit_admin_category_path(category), :class => "btn btn-primary btn-xs" %> <%= link_to "Delete", admin_category_path(category), :method => 'delete', :class => "btn btn-danger btn-xs", data: { confirm: 'Are you sure?' } %>
              <% if category.subcategories.present? %>
                <%= render partial: 'subcategory', locals: {subcategories: category.subcategories} %>
              <% end %>
                </ul>
              <% end %>
            </li>
          <% end %>
        </ul>
  <% end %>
<ul>
  <% subcategories.each do |sub| %>
    <li class="top-clear"><%= sub.name %> <%= link_to "Edit", edit_admin_category_path(sub), :class => "btn btn-primary btn-xs" %> <%= link_to "Delete", admin_category_path(sub), :method => 'delete', :class => "btn btn-danger btn-xs", data: { confirm: 'Are you sure?' } %>
  <% if sub.subcategories.present? %>
    <%= render partial: 'subcategory', locals: {subcategories: sub.subcategories} %>
  <% end %>

</li>
  <% end %>
</ul>