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迁移:从表中删除列

如何在 Rails 3 中迁移数据?

如何回滚到以前的迁移并删除架构中的表和列?

如何编写迁移以重命名 Rails 中的 ActiveRecord 模型及其表?

用于创建表并在两个字段上添加唯一索引的 Rails 迁移文件在迁移期间似乎被忽略了

Rails 6:从表单输入动态创建/切换/迁移数据库