我在 Rails 迁移中将一列(“old_name”)重命名为“new_name”)并将另一列(“column2”)从整数转换为布尔值:
def up
rename_column :my_models, :old_name, :new_name unless column_exists?(:my_models, :new_name)
...........
if column_exists?(:my_models, :column2) && !column_exists?(:my_models, :column2_num) && MyModel.columns_hash['column2'].type==:integer
rename_column :my_models, :column2, :column2_num
add_column :my_models, :column2, :boolean, :null => false, :default => true
MyModel.reset_column_information
MyModel.all.each do |item|
item.column2 = (item.column2_num!=0)
item.save!
end
remove_column :my_models, :column2_num
end
...........
end
rake db:migrate 结果:
undefined method `old_name' for #<MyModel:0x4ff4238>
“保存!”中出现错误!方法。
我也试过:
MyModel.connection.schema_cache.clear!
MyModel.reset_column_information
id 也不起作用。
值得一提的是,我已经应用了此迁移的先前版本一次,并且在回滚后(“向下”方法为空)我试图再次应用它。因此,数据库模式当前不包含“old_name”,因为它没有物理还原。