Ruby on rails 将类别子类别关系列至第n级
我有一个categories表,其中有一个parent_id列,下面是categories模型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",
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>