是否可以更新迁移中的数据库数据?
我有这个迁移:
class FixTokenAuth < ActiveRecord::Migration
def change
unless column_exists? :users, :provider
add_column :users, :provider, :null => false
end
unless column_exists? :users, :uid
add_column :users, :uid, :null => false, :default => ""
end
unless column_exists? :users, :tokens
add_column :users, :tokens, :text
end
end
end
我还要添加索引
add_index :users, [:uid, :provider], :unique => true
当然迁移失败了:uid是&#34;&#34;默认情况下,它不是唯一的。
创建列后,我需要在User模型上执行一个块:
User.all.each{|u|
u.provider = "email"
u.save!
}
这样做&#39; uid&#39;字段由数据填充。
是否可以在迁移中添加内容?
答案 0 :(得分:1)
迁移只是普通的ruby代码,它会被执行,因此您可以做的最好的事情是将change
方法更改为up
and down
。在这些方法中,您可以在add_column
语句之后安全地编写更新代码。