Rails - reset_column_information не работает

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


person Paul    schedule 02.06.2012    source источник


Ответы (1)


Недавно у меня была такая же проблема, и я обнаружил, что проблема была не в Rails, а в триггере обновления в базе данных, который все еще ссылался на старое имя столбца.

Удалил эту часть триггера, и миграция прошла.

person josht    schedule 23.10.2012