我网站迁移到Rails的时候遇到了类似的问题。我有用于存储文本DA表TA为每种语言我的网站提供,所以我有这样的事情:
CREATE TABLE Project_Lang(
project_id INT NOT NULL,
language_id INT NOT NULL,
title VARCHAR(80),
description TEXT,
PRIMARY KEY pk_Project_Lang(project_id, language_id),
FOREIGN KEY fk_Project_Lang_Project(project_id)
REFERENCES Project(project_id)
ON DELETE RESTRICT ON UPDATE CASCADE,
FOREIGN KEY fk_Project_Lang_Language(language_id)
REFERENCES Language(language_id)
ON DELETE RESTRICT ON UPDATE CASCADE
)ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 DEFAULT COLLATE = utf8_spanish_ci;
但由于Rails不处理复合主键开箱我被迫改变表的结构,它有它自己的主键:
CREATE TABLE Project_Lang(
project_lang_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
project_id INT NOT NULL,
language_id INT NOT NULL,
title VARCHAR(80),
description TEXT,
UNIQUE INDEX(project_id, language_id),
FOREIGN KEY fk_Project_Lang_Project(project_id)
REFERENCES Project(project_id)
ON DELETE RESTRICT ON UPDATE CASCADE,
FOREIGN KEY fk_Project_Lang_Language(language_id)
REFERENCES Language(language_id)
ON DELETE RESTRICT ON UPDATE CASCADE
)ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 DEFAULT COLLATE = utf8_spanish_ci;
我还创建了一个独特的指数,以前这样做没有重复记录插入复合主键列。然后在我的Rails模型中,我可以简单地:
self.primary_key = "project_lang_id"
而且做到了这一点。不是我想要的,但比战斗框架更好。
如果这个词属于一种语言,您为什么需要将它存储在它的语言?您可以将其委托给语言模型。这就是说你会与铁轨战斗。我只是使用ID键作为主键。代表:朗语言,而不用担心复合键 – Doon
的确,谢谢。 :lang来自ald scaffilding。我需要从这里删除它,因为我使用语言模型。 Thx –