我正在对现有的 Rails 站点进行维护工作,并且遇到了一些源自多对多关联的问题。看起来该站点最初是使用has_and_belongs_to_many
一些关系构建的,这些关系后来在业务逻辑中变得更加复杂,所以我需要使用它has_many :through
来支持关系表中的其他字段。但是,最初用于 HABTM 的连接表没有主键,我必须添加一个以支持使用has_many :through
.
向包含大量数据的现有表添加主键的最佳方法是什么?还有另一种方法可以做我想做的事吗?
顺便说一句,该系统是在 Oracle 上运行的。
谢谢!
贾斯汀
更新 2009 年 11 月 9 日下午 3:58:我不是 Oracle 专家,并且一直迷失在 Oracle 的非空、自动增量等版本的荒野中。最初,我尝试通过添加一个新字段作为主键来执行 Mike 和 Corey 建议的操作,但 Oracle 不允许我将非空字段添加到非空表 (ORA-01758)。然后我将数据导出为 SQL,删除行,添加 PK 并将其设置为非空,然后尝试导入数据,但我不断收到错误消息“无法将 NULL 插入 id...” (ORA-01400)。
最后,我尝试使用 Corey 在他的评论中建议的迁移,但是当我手动更改数据库时,rake 遇到了 Oracle 抛出的相同错误(“无法将非空字段添加到非空表”)。我清除了表格,运行了迁移(有效),然后尝试重新导入数据,但我上次尝试导入时遇到了相同的错误(“无法将 NULL 插入 id ...”)。如何保存我的数据并添加我需要的主键?我知道有人提出了编写 rake 任务的可能性,但我不确定如何在这方面进行。有任何想法吗?