Railsの移行で、1つの列の名前を変更し(「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も機能しません。
この移行の以前のバージョンを 1 回適用し、ロールバック (「ダウン」メソッドが空) した後、再度適用しようとしていることは言うまでもありません。そのため、物理的に元に戻されていないため、データベース スキーマには現在 "old_name" が含まれていません。