Ruby on rails 如何使用具有子类别的类别(使用Rails)创建模型?
我正在通过Rails创建一个博客。我通过多对多关系将帖子和类别模型关联起来。如何将子类别合并到此模型中?创建子类别模型,如下所示:Ruby on rails 如何使用具有子类别的类别(使用Rails)创建模型?,ruby-on-rails,many-to-many,blogs,categories,Ruby On Rails,Many To Many,Blogs,Categories,我正在通过Rails创建一个博客。我通过多对多关系将帖子和类别模型关联起来。如何将子类别合并到此模型中?创建子类别模型,如下所示: # post.rb has_and_belongs_to_many :categories has_many :sub_categories # category.rb has_and_belongs_to_many :posts has_many :sub_categories # sub_category.rb belongs_to :category b
# post.rb
has_and_belongs_to_many :categories
has_many :sub_categories
# category.rb
has_and_belongs_to_many :posts
has_many :sub_categories
# sub_category.rb
belongs_to :category
belongs_to :post
# delegate attributes like so
delegate: :title, to: :category
在
最好的方法是使用一个层次结构gem,通常是祖先
或闭包树
,为您的类别
创建一个“树”型结构。然后,您将能够将博客
与每个类别关联,从而创建所需的层次结构功能
我们以前已经实现了这一点-使用祖先
gem:
类别 从上图中可以看出,您缺少的“秘诀”是您的类别不在基于层次结构的结构中 这一点之所以重要,是因为如果你将博客文章与特定的
类别关联起来,为了使这些类别达到你想要的“子类别”结构,你需要能够创建一个支持它的系统,从而形成层次结构gems
具体地说,您目前正在创建一个单独的sub_category.rb
模型。正确的方法是使用onemodel-Category
,并使用层次结构gems为您提供树基础结构
我们是这样做的:
#app/models/category.rb
class Category < ActiveRecord::Base
has_ancestry #-> enables the "ancestry" gem
has_and_belongs_to_many :posts
end
#app/models/post.rb
class Post < ActiveRecord::Base
has_and_belongs_to_many :categories #-> you'll need a blogs_categories table with blog_id | category_id
end
这将允许您调用以下命令:
#app/views/categories/index.html.erb
<%= render partial: "category", locals: { collection: @categories } %>
#app/views/categories/index.html.erb
#app/views/categories/_category.html.erb
<ol class="categories">
<% collection.arrange.each do |category, sub_item| %>
<li>
<!-- Category -->
<%= link_to category.title, edit_admin_category_path(category) %>
<!-- Children -->
<% if category.has_children? %>
<%= render partial: "category", locals: { collection: category.children } %>
<% end %>
</li>
<% end %>
</ol>
#app/views/categories/index.html.erb
<%= render partial: "category", locals: { collection: @categories } %>