【问题标题】:How make categories relationships with several model?如何与多个模型建立类别关系?
【发布时间】:2014-03-15 11:35:33
【问题描述】:

我有下一个模型:文章、公告、目录和媒体。

对于每个模型的项目,我需要创建一个子类别和一个类别。我将计划创建一个包含两列的关系表:parend_idchild_id,并为每个模型创建一个列category_id

我应该创建多少个关系模型?

  • 一个为所有?
  • 或者每个模型一个关系模型?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    无需创建关系模型,只需使用belongs_to 关系

    因为你说跟随我猜belongs_to关系应该这样做

    为我需要的每个模型的项目创建子类别和类别。

    所以只需在您的表格中添加subcategory_idcategory_id:文章、公告、目录和媒体并建立has_many belongs_to 关系

    编辑但如果你坚持使用关系模型,那么我建议为每个模型使用一个关系模型。

    最后编辑:我真的认为你应该使用belongs_to,has_many 关系

    Class Article < ActiveRecord::Base
        belongs_to :category
        belongs_to :subcategory
    end
    
    class Category < ActiveRecord::Base
      has_many :articles
      # the same relation(has_many) will be for Announcements, Catalogs and Media
    
      has_many :subcategories
    end
    
    class Subcategory < ActiveRecord::Base
      has_many :articles
    
      belongs_to :category
    end
    

    这样你就可以得到所有使用category.subcategories.articles的文章

    如果category 只有一个Subcategory,则将它们之间的关系更改为has_one,您的语法将变为category.subcategory.articles

    【讨论】:

    • 如何最好地组织类别和子类别之间的关系?我想如果我为每个模型创建关系模型,我将能够使用 catecory.subcategory.articles 请求
    • 我有一个问题,文章将只有一个subcategory 和一个category 对吗?
    • @Uandі,是的,用户应该选择类别,然后选择子类别并查看文章列表
    【解决方案2】:

    我个人会在单个连接表中使用带有多态关联的has_many :through 关系:

    #app/models/article.rb
    Class Article < ActiveRecord::Base
        has_many :categorizable_categories
        has_many :categories, through: :categorizable_categories
    end
    
    class Article < ActiveRecord::Base
      has_many :tags, as: :taggable,dependent: :destroy
      has_many :categories, through: :tags
    end
    class Category < ActiveRecord::Base
      has_many :tags, dependent: :destroy
      has_many :articles, through: :tags, source: :taggable, source_type: 'Article'
    end
    class Tag < ActiveRecord::Base
      belongs_to :taggable, polymorphic: true
      belongs_to :category
    end
    

    这将允许您使用 @article.categories 之类来调用每个模型的类别

    要实现父子类别,我建议使用 Ancestry gem 之类的东西 - 你会在连接表中设置一个祖先列 - 基本上允许你直接在模型的类别之间创建关系

    【讨论】:

      猜你喜欢
      • 2022-06-25
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      • 2016-11-13
      • 2010-11-21
      • 2011-12-01
      • 2017-11-18
      • 1970-01-01
      相关资源
      最近更新 更多