首页 > 解决方案 > Rails:如何为相同的模型设置多种关系类型

问题描述

我有一个ProductCategory模型有has_and_belongs_to_many关系。所以我可以搜索Product.categoriesCategory.products

class Product < ApplicationRecord
  has_and_belongs_to_many :categories
end

class Category < ApplicationRecord
  has_and_belongs_to_many :products
end

现在我想添加一个新的关系到Product: 它应该被调用main_category,它应该是has_oneProduct到 的关系Category。所以一个Product只能有一个 MainCategory。但是 Category 当然应该返回所有 MainCategory 产品。

标签: ruby-on-railsactiverecordrails-migrations

解决方案


我猜你可以简单地这样做

class Product < ApplicationRecord
     has_and_belongs_to_many :categories
     belongs_to :main_category, class_name: 'Category', foreign_key: :main_category_id
end
class Category < ApplicationRecord
     has_and_belongs_to_many :categories
     has_many :main_products, class_name: 'Product', foreign_key: :main_category_id
end

您将不得不在products名为的表中添加一列main_category_id

来源https://guides.rubyonrails.org/association_basics.html#bi-directional-associations


推荐阅读