我有一个rails应用程序,它有一个特定的表,其中数据甚至结构是在rails和ruby之外动态生成的。这是一个设计,它是一个特殊的表,其中结构是从其他活动记录和关系中自包含的。对其起作用的模型也是原子的。所有这些都是设计和有目的的。我不想要这个表的特定结构,这意味着每次初始化表时列名和列数都可以更改。如果表结构发生了变化,我可以管理对模型类的更改。
我的问题是rails迁移过程似乎妨碍了,我不想在迁移和回滚之间来回徘徊,只是为了让这个单表重置状态。
我正在寻找的行为实际上是每次我“生成”该表的数据时我想删除可能已存在的表(在所有环境中:生产,开发和测试)。
是否有明确的方法绕过迁移过程?或者创建一个独立于应用程序中其他迁移序列的特殊迁移?
整个数据库不是一次性的,但这一个表是。
关于如何实现这种行为的想法?
Rails 3,PostgreSQL数据库,git版本控制,heroku主机
答案 0 :(得分:2)
我认为简单的答案是“不使用迁移” - 它们旨在帮助您相对优雅地扩展静态数据库模式。迁移除了生成/执行数据库的数据定义语言(DDL)之外还做很多事情 - 它知道如何前进和后退,通过源代码(schema.rb
)和数据之间的链接(在{中)知道{1}}表)如何确定需要运行哪些迁移,等等。您只需要执行DDL的部分(毕竟,这只是一种SQL)。
至少部分内容是here in the TableDefinition API。您可能需要的所有基础设施似乎都存在。
答案 1 :(得分:2)
您可以将其设置为rake任务(听起来就像您使用它一样),其中包含用于构造表的SQL / rails命令,类似于rake db:seed
所做的