Сохранить после переименования_колонки в миграции Rails - PullRequest
0 голосов
/ 03 сентября 2010

Я пытаюсь обойти неспособность Oracle изменить тип столбца с данными в нем.Я кеширую правильное значение атрибута, устанавливаю его равным nil, переименовываю столбец и затем пытаюсь переустановить атрибут:

class SwitchToForeignKeys < ActiveRecord::Migration
  def self.up
    registration_countries = {}
    Registration.all.each do |r|
      if c = Country.find_by_name(r.country)
        registration_countries[r.id] = c.id
        r.country = nil
        r.save
      end
    end

    rename_column :registrations, :country, :country_id
    change_column :registrations, :country_id, :integer

    Registration.reset_column_information
    registration_countries.each do |reg_id, country_id|
      r = Registration.find(reg_id)
      r.reload
      r.country_id = country_id
      r.save
    end
  end
end

При запуске миграции я получаю эту ошибку на втором r.save:

undefined method `country' for #<Registration:0x7f409698be48>

1 Ответ

0 голосов
/ 03 сентября 2010

Один из обходных путей - использовать execute:

registration_countries.each do |reg_id, country_id|
  execute "UPDATE registrations SET country_id = '#{country_id}' WHERE id = #{reg_id}"
end
execute "commit"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...