Ruby on rails 具有不同主键的HABTM联接表

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

我有两个模型1<代码>类别主键是
客户编号
,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