ruby-on-rails - Rails:如何为相同的模型设置多种关系类型
问题描述
我有一个Product
和Category
模型有has_and_belongs_to_many
关系。所以我可以搜索Product.categories
或Category.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_one
从Product
到 的关系Category
。所以一个Product
只能有一个 MainCategory。但是 Category 当然应该返回所有 MainCategory 产品。
我必须创建类别的子类吗?通常我不想创建一个额外的类
我怎样才能解决这个问题,只需调用
Product.main_category
orCategory.main_products
?如何正确放置索引?
迁移应该是什么样子?
解决方案
我猜你可以简单地这样做
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
推荐阅读
- macos - Minikube+Kubectl“无法连接到服务器 - 超时”
- rest - 如何使用 REST 请求创建 BigQuery 视图
- php - PHP是否优化了for循环上的多个strlen调用?
- typescript - 为什么自动完成停止在 TypeScript 中类型的对象中工作?
- pentaho-spoon - 在开始第二行的作业之前完全执行第一行的 pentaho 作业
- solr - 如何在 SOLR 的文本字段中搜索短语?
- c - 从 unit8_t 缓冲区到结构的指针类型转换
- c++ - 如何对列表执行 GroupBy Sum 查询?
- java - AddLinkEntry 类是原始类型。对泛型类型 AddLinkEntry 类的引用
应该参数化 - python - 如何在运行 tensorflow 时使用命令行传递数字列表?