我想与模型Projects
建立多对多递归关联项目has_many
比较(或可比较),其他项目
和项目可以是许多项目的比较
我想在每条记录中添加其他列,因此我需要一个连接表
我做了以下没有帮助的研究:
在最后一个链接中,这是有问题的代码:
CREATE TABLE tutorship (
tutor_id INTEGER,
tutored_id INTEGER,
hasPaid BOOLEAN,
PRIMARY KEY (tutor_id, tutored_id)
);
如何在同一个表中有两个主键?如果这是正确的,这是问题,我该如何设置?
一般来说,我如何在活动记录中设置它?
答案 0 :(得分:3)
你正在寻找的术语似乎是“自我引用多对多”。 当你构建它时,第一次正确地建议测试并重新测试你在rails控制台中的关联是非常棘手的。
```
class Project < ActiveRecord::Base
has_many :comparables
has_many :comps, :through => :comparables
# rest of class omitted.
end
class Comparables < ActiveRecord::Base
belongs_to :project
belongs_to :comp, :class_name => 'Project'
end
```
如果我在上面的例子中犯了错误,有人会纠正我。答案 1 :(得分:0)
您不能拥有多个主键。按照这个定义,这没有意义。但是,您可以拥有多个唯一索引。你所描述的不是递归的。这是一对多关系。我不太明白你真正想要的是什么,因为你有一些代码可以谈论导师,但你的原始评论必须与项目有关。
让我们说你有项目。任何给定的项目都可以有多个comps。同时,任何给定的comp都可以与多个项目相关联。你这样做的方法是使用联合表。
沿着这些方向发展。
create table Projects
(
ProjectID int,
OtherColumnsHere
)
create table Comps
(
CompID int,
OtherColumnsHere
)
create table ProjectComps
(
ProjectID int,
CompID int,
AuditingColumnsLikeDateCreatedHere
)