我在Rails中遇到了一个奇怪的迁移问题。
我有这个用户表
我想扩展这个用户表,只有很少的新列,比如
然后我想运行这样的迁移来填充前两个用户的新列:
class UpdateUser < ActiveRecord::Migration
def up
User.find(1).update_attributes!( :name => 'Alexander', :dob => '1984-08-20')
User.find(2).update_attributes!( :name => 'Ben', :dob => '1929-04-04')
end
def down
end
end
问题出现了:当我运行所有迁移文件(rake db:migrate)而没有最后一个(UpdateUser)时,然后运行一个新的迁移(rake db:migrate),最后一个它运行。但是,当我一步完成所有迁移(删除,创建和迁移)时,它不起作用。
所以我必须排除最后一个迁移文件并在第一次“迁移回合”之后再包含它......为什么会这样?
答案 0 :(得分:3)
为什么不在添加列时更新表格。因此,您必须在添加列后执行User.reset_column_information
方法,以确保您的模型具有当前列信息。
add_column ...
User.reset_column_information
User.find(1).update_attributes!( :name => 'Alexander', :dob => '1984-08-20')
User.find(2).update_attributes!( :name => 'Ben', :dob => '1929-04-04')
您可以在http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
找到有关ActiveRecord Migration的更多信息