Rails 建模:将 HABTM 转换为 has_many :through

2024-05-09

我正在现有的 Rails 站点上进行维护工作,并且遇到了一些由多对多关联引起的问题。看起来该网站最初是使用has_and_belongs_to_many对于一些业务逻辑变得更加复杂的关系,所以我需要使用has_many :through而是支持关系表中的其他字段。然而,最初用于 HABTM 的连接表没有主键,我必须添加一个主键来支持单独的关系建模,使用has_many :through.

向包含大量数据的现有表添加主键的最佳方法是什么?还有另一种方法可以做我想做的事情吗?

顺便说一句,系统运行在Oracle上。

Thanks!

Justin

2009 年 11 月 9 日下午 3:58 更新:我不是 Oracle 专家,并且一直迷失在 Oracle 的 not null、自动增量等版本中。最初,我尝试按照 Mike 和 Corey 的建议添加一个新字段作为主键,但 Oracle 不允许我向非空表添加非空字段 (ORA-01758)。然后,我将数据导出为 SQL,删除行,添加 PK 并将其设置为非空,然后尝试导入数据,但我不断收到“无法将 NULL 插入 id...”之类的错误。 (ORA-01400)。

最后,我尝试使用 Corey 在评论中建议的迁移,但 rake 遇到了与我手动更改数据库时 Oracle 抛出的相同错误(“无法将非空字段添加到非空表”)。我清除了表,运行迁移(有效),然后尝试重新导入数据,但上次尝试导入时遇到了相同的错误(“无法将 NULL 插入 id...”)。如何保存我的数据并添加我需要的主键?我知道有人建议编写 rake 任务的可能性,但我不确定如何在这方面继续进行。有任何想法吗?


I use SQL开发人员 http://www.oracle.com/technology/products/database/sql_developer/index.html当管理oracle数据库时。只需创建列并向数据库添加约束,例如:

sql> alter table Employee add constraint Employee_pk primary key(Employee_ID);

也许看到here http://www.java2s.com/Code/Oracle/Constraints/AddPrimaryKey.htm了解更多详细信息。

Edit:

现在我重新考虑这一点,你应该能够在迁移中做到这一点

add_column :table, :id, :primary_key

然后,您需要在迁移中植入一些数据。只是迭代并添加索引的 ruby​​ 代码。看seed_fu http://github.com/mbleigh/seed-fu/tree/master and 数据库填充 http://github.com/ffmike/db-populate/tree/master求助。 Rails 3 将允许您使用 rake db:seed 播种数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 建模:将 HABTM 转换为 has_many :through 的相关文章

随机推荐