8

我有一个 rails 应用程序,它有一个特定的表,其中数据甚至结构是在 rails 和 ruby​​ 之外动态生成的。这是设计使然,它是一个特殊的表,其中结构独立于其余活动记录和关系。在它上面工作的模型也是原子的。同样都是设计的,有目的的。我不想要这个表的特定结构,这意味着每次初始化表时列名和列数都会改变。如果表结构发生更改,我可以管理对模型类的更改。

我的问题是 rails 迁移过程似乎妨碍了我,我不想在迁移和回滚之间来回走动,只是为了获得这个单表重置的状态。

我正在寻找的行为实际上是每次我“生成”该表的数据时,我想删除可能已经存在的表(在所有环境中:生产、开发和测试)。

有没有明确的方法可以绕过迁移过程?或者创建一个独立于应用程序中其他迁移序列的特殊迁移?

整个数据库不是一次性的,但这张表是一次性的。

关于如何实现这种行为的想法?

Rails 3、PostgreSQL 数据库、git 版本控制、heroku 托管

4

2 回答 2

2

我认为简单的答案是“不要使用迁移”——它们旨在帮助您相对优雅地扩展静态数据库模式。除了生成/执行数据库的数据定义语言 (DDL) 之外,迁移还做了很多事情——它知道如何前进和后退,通过源代码 ( schema.rb) 和数据(在schema_migrations表中)之间的链接知道如何确定哪个需要运行迁移,等等。您所需要的只是执行 DDL 的部分(毕竟,这只是一种 SQL)。

并且至少其中一部分在 TableDefinition API中。您可能需要的所有基础设施似乎都已存在。

于 2012-10-11T03:53:55.337 回答
2

您可以将其设置为包含用于构建表的 SQL/rails 命令的 rake 任务(听起来像您正在使用它),类似于使用rake db:seed

于 2012-10-11T04:04:01.123 回答