Я переименовываю один столбец («old_name» в «new_name») и преобразовываю другой столбец («column2») из целого числа в логическое в миграции Rails:
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», потому что она не была восстановлена физически.