has_and_belongs_to_many连接表中不允许使用主键

时间:2012-01-17 14:38:10

标签: mysql ruby-on-rails activerecord

我在两个实体,数据中心和项目之间有多对多的链接表, 在遗留代码中。我发现,这真的是一对多的关系。

作为清理关系的第一步,我想提出一个独特的索引 在其中一个领域。

现在我收到以下错误:

has_and_belongs_to_many连接表(datacenters_projects)中不允许使用主键。

我正在使用在ruby 1.8.7p174和mysql Ver 14.12 Distrib 5.0.77上运行的Rails 2.3.8。

这不是主键,它只是一个独特的索引。 我想这是一个候选键,但我还没有确定它是一个主键。

我不知道为什么mysql认为这是一个主键。 我不知道为什么ActiveRecord会反对a中的链接表 has_and_belongs_to_many有一个主键。

但我真正的问题是,“我有什么办法可以把一个独特的索引放在上面 其中一个字段,没有ActiveRecord给我一个错误?“

有什么方法可以告诉add_index这不是主键吗?

2 个答案:

答案 0 :(得分:1)

我不确定为什么会失败。您应该能够在迁移中使用SQL来解决它,例如:

ActiveRecord::Base.connection.execute("CREATE UNIQUE INDEX project_id_index ON datacenters_projects (project_id)")

答案 1 :(得分:0)

切换到

has_many :through => ...

参考:guides