Ruby on rails 具有不同主键的HABTM联接表
我有两个模型1<代码>类别主键是Ruby on rails 具有不同主键的HABTM联接表,ruby-on-rails,Ruby On Rails,我有两个模型1类别主键是客户编号,2产品主键是id。现在我想在类别和产品之间建立一个HABTM关系。这里的问题是如何用cust_number和product_id作为键创建联接表 对于您想要使用的这个用例,而不是拥有并且属于许多。他们都实现了相同的目标(m2m联盟),但拥有并且属于许多人 AFAIK HABTM只接受用于在联接表上设置外键的参数,似乎没有办法告诉它FK指向哪个PK 运行生成器以创建联接模型: rails g model category_product product:refer
客户编号
,2<代码>产品主键是id
。现在我想在类别和产品之间建立一个HABTM关系。这里的问题是如何用cust_number和product_id作为键创建联接表 对于您想要使用的这个用例,而不是拥有并且属于许多
。他们都实现了相同的目标(m2m联盟),但拥有并且属于许多人
AFAIK HABTM只接受用于在联接表上设置外键的参数,似乎没有办法告诉它FK指向哪个PK
运行生成器以创建联接模型:
rails g model category_product product:references
打开迁移并更改外键,使其指向自定义主键:
create_table :category_products do |t|
t.references :product, foreign_key: true
t.references :category, foreign_key: { primary_key: "cust_number" }
end
更改关联中的外键:
class CategoryProduct < ApplicationRecord
belongs_to :category, foreign_key: "cust_number"
belongs_to :product
end
在rails控制台中完成上述步骤后,我给出了Product.categories
,但得到了类似NoMethodError(未定义的方法
categories'for#)的错误,`关联被添加到类的实例中,而不是类本身。我的cust\u number
属性数据类型是string
,所以在进行迁移时遇到问题在这种情况下,您需要在迁移文件中使用add_列和add_外键来手动进行迁移?
class Category < ApplicationRecord
has_many :category_products
has_many :products, through: :category_products
end
class Product < ApplicationRecord
has_many :category_products
has_many :categories, through: :category_products
end