迁移无疑比仅仅启动phpMyAdmin和更改架构更好(就像我在php时期所做的那样),但在使用它们一段时间后,我认为它们存在致命缺陷.
版本控制是一个已解决的问题.迁移的主要功能是保留数据库更改的历史记录.但是为每次更改存储不同的文件是一种笨拙的方式来跟踪它们.如果post.rb要添加新的虚拟属性,则不要创建新版本(或表示增量的文件) - 当您要添加新的非虚拟属性时,为什么要创建新的迁移?
换句话说,就像检查post.rb版本控制一样,为什么不检查schema.rb到版本控制并直接对文件进行更改?
这在功能上与为每个delta保留文件相同,但使用起来要容易得多.我的心理模型是"我希望表X有这样的列(或者我真的希望模型X具有这样的属性)" - 为什么你必须从这里推断如何从现有的模式中获得; 只是打开schema.rb并给表X正确的列!
但即使是类包装表的想法也是一个实现细节!为什么我不能打开post.rb并说:
Class Post
t.string :title
t.text :body
end
Run Code Online (Sandbox Code Playgroud)
如果你使用这样的模型,你必须决定如何处理现有数据.但即便如此,迁移也是过度的 - 当您迁移数据时,当您使用迁移down方法时,您将失去保真度.
无论如何,我的问题是,即使你想不出一个更好的方法,也不是有点粗略的迁移?