【发布时间】:2016-02-15 01:58:42
【问题描述】:
假设有一个创建一些记录的迁移,并且有两个看起来像这样的提交
# commit 1 by Alice
# migration
def up
create_table :cities do |t|
t.string :name
end
City.create!(name: 'New York')
City.create!(name: 'Moscow')
end
# commit 2 by Bob
# migration
def change
change_table :cities do |t|
t.boolean :capital
end
end
# model
class City
before_create :set_capital
def set_capital
capital = false
end
end
现在,如果第三个人拉动代码迁移将失败,因为capital 属性将不存在。有没有办法补救这种情况?
【问题讨论】:
-
首先不要使用迁移来创建记录 - 只需使用它们来更改数据库架构。这就是种子文件的用途。所以解雇爱丽丝:)
-
如果你纠正了当第三人克隆 repo 并运行
rake db:migrate时迁移会失败的原因并没有明显的原因 - 迁移并没有真正关心你的模型或你的 @987654324 @ 筛选。他们只是改变了数据库架构。 -
如果你必须解决这个问题,你将创建一个新的提交,从 Alice 的错误迁移文件中删除
City.create!(name: 'Moscow')。
标签: ruby-on-rails ruby activerecord rails-activerecord rails-migrations