我正在通过Rails创建一个博客。我通过多对多的关系将帖子和分类模型联系起来。如何在此模型中包含子类别?如何创建具有子类别的类别的模型(使用Rails)?
1
A
回答
2
最好的办法是使用层次的一个宝石,通常Ancestry
或Closure_Tree
为您的categories
创建一个“树”型结构。然后,您可以将blogs
与每个类别关联起来,创建您所需的层次结构功能。
之前我们已经取得了这一点 - 使用Ancestry
宝石:
分类
你可以从上面的图片中, “秘密武器” 你看缺少的是您的类别不在基于层次结构的结构中。
这个很重要的原因是因为如果您将博客文章与特定的categories
相关联,为了使这些类别实现您所期望的“子类别”结构,您需要能够创建一个支持它的系统,因此hierarchy
宝石。
具体而言,您目前正致力于创建单独的sub_category.rb
模型。正确的做法是保持一个模型 - Category
- 并使用层次结构gem为您提供树基础结构。
下面是我们如何做到这一点:
#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/controllers/posts_controller.rb
class PostsController < ApplicationController
def new
@post = Post.new
end
def create
@post = Post.new post_params
@post.save
end
private
def post_params
params.require(:post).permit(:title, :body, :category_ids)
end
end
查看
最后,建立真正神奇的是,如果你想在一个层次结构/树格式来显示你的项目,你就可以使用Ancestry
关联方法给你创建“嵌套”列表能力:
要做到这一点,你只需要使用的部分,这将call the children of the parent objects,让你展现出“树”类型的层次结构(以及创建子类别):
#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 } %>
0
创建 - 行业标准模型,就像这样:
# 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
了解更多关于他们在rails guide
相关问题
- 1. 使用laravel得到具有子类别的类别
- 2. 为类别和子类别创建表
- 3. 如何获取具有类别详细信息的子类别?
- 4. 如何使用rake数据库创建类别和子类别:种子
- 5. 使用mysql查询创建动态类别和子类别
- 6. 选择具有2个级别(类别和子类别)的类别
- 7. Rails:类别和子类别树
- 8. Rails的分层模型 - 多个类别
- 9. 得到类别和子类别的所有产品(rails,awesome_nested_set)
- 10. 如何在ERD模型中创建产品的类别?
- 11. 让WordPress的子类别使用类别模板
- 12. 使用php显示类别,子类别和子类别
- 13. 具有类别和子类别的导航栏/菜单
- 14. 的类别和子类别
- 15. 如何找到具有继承性的推进模型的子类别列表
- 16. 如何显示类别,分类别和子子类别 - 笨
- 17. 如何添加子类别的分类模型
- 18. Laravel使用具有模式的表创建模型类
- 19. 使用jQuery过滤类别/子类别
- 20. MySql,产品的可选类别,子类别和子子类别
- 21. Django的类别,子类别和子子类别
- 22. 如何Laravel类别 - 子类别
- 23. 如何显示类别和子类别?
- 24. 如何在Rails模型创建中使用Range数据类型?
- 25. 循环的子类别,子类别等
- 26. 如何使用rest-api添加类别以创建帖子
- 27. Django模型继承:使用现有超类创建子类
- 28. 创建类别和子类别系统新闻管理
- 29. 类别使用的结构的类型
- 30. Rails 3 - 使用.find创建类别未知的记录