6

在终端上,是否有一个 rake 任务来列出已在特定模型上运行的所有迁移?如果没有,我该如何建造一个?

当我跑的时候rake -Trake db:migrate:status似乎是正确的答案,但它给了我迁移名称作为列之一。尽管名称Add logo to company确实表明了公司模型,但并非所有迁移都有这样明确的名称。举个例子Change data type for content。我有 400 多个迁移文件,所以这个功能真的很有帮助。

因此,理想的输出将是:

database: abcd_development

 Status   Migration ID    Migration Name     Model Name
----------------------------------------------------------

谢谢!

4

1 回答 1

11

如果您一直坚持迁移命名约定,您可以只传递rake db:migrate:statusthrough的输出grep

rake db:migrate:status | grep 'compan'

不过,这并不完美 - 迁移名称不需要与它们实际所做的事情有任何关系 - 迁移可能会将列 'name' 添加到 'companies' 表并被命名EvacuateWeaselTubes并仍然可以正常运行。

如果你想构建一个可以克服这个问题的任务,它必须解析每个迁移文件以查看它发生了什么变化。由于有很多方法可以指定迁移中的更改(例如add_columncreate_table块或调用execute('CREATE whatever')),您可能希望搜索提及的Model.table_name,然后检查schema_migrations表以查看它是否已运行。

于 2013-09-12T14:31:33.833 回答