Rails 创建没有迁移的表
Posted
技术标签:
【中文标题】Rails 创建没有迁移的表【英文标题】:Rails creating a table without migration 【发布时间】:2012-10-01 13:16:27 【问题描述】:我有一个 rails 应用程序,它有一个特定的表,其中数据甚至结构都是在 rails 和 ruby 之外动态生成的。这是设计使然,它是一个特殊的表,其结构独立于其余的活动记录和关系。在它上面工作的模型也是原子的。再次所有的设计和目的。我不想要这个表的特定结构,这意味着每次初始化表时列名和列数都会改变。如果表结构发生变化,我可以管理模型类的变化。
我的问题是 Rails 迁移过程似乎阻碍了我,我不想在迁移和回滚之间来回走动,只是为了获得这个单表重置的状态。
我正在寻找的行为实际上是每次我“生成”该表的数据时,我想删除可能已经存在的表(在所有环境中:生产、开发和测试)。
是否有绕过迁移过程的明确方法?或者创建一个独立于应用中其他迁移顺序的特殊迁移?
整个数据库不是一次性的,但这张表是一次性的。
关于如何实现这种行为的想法?
Rails 3、PostgreSQL 数据库、git 版本控制、heroku 托管
【问题讨论】:
【参考方案1】:我认为简单的答案是“不要使用迁移”——它们旨在帮助您相对优雅地扩展静态数据库架构。除了生成/执行数据库的数据定义语言 (DDL) 之外,迁移还做了很多事情——它知道如何前进和后退,通过源代码 (schema.rb
) 和数据之间的链接 (schema_migrations
表)如何确定需要运行哪些迁移,等等。您所需要的只是执行 DDL 的部分(毕竟,这只是一种 SQL)。
至少其中一部分是here in the TableDefinition API。您可能需要的所有基础设施似乎都已存在。
【讨论】:
我想真的就是这么简单。谢谢。【参考方案2】:您可以将其设置为包含用于构建表的 SQL/rails 命令的 rake 任务(听起来像您正在使用它),类似于使用 rake db:seed
所做的操作
【讨论】:
那行得通,我只是将所有代码放入一个 rake 任务中,我可以根据需要随时更改它。谢谢。以上是关于Rails 创建没有迁移的表的主要内容,如果未能解决你的问题,请参考以下文章
如何编写迁移以重命名 Rails 中的 ActiveRecord 模型及其表?