【问题标题】:Save after rename_column in Rails migration在 Rails 迁移中的 rename_column 后保存
【发布时间】:2010-09-03 18:25:57
【问题描述】:

我正在尝试解决 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>

【问题讨论】:

    标签: ruby-on-rails activerecord migration


    【解决方案1】:

    一种解决方法是使用执行:

    registration_countries.each do |reg_id, country_id|
      execute "UPDATE registrations SET country_id = '#{country_id}' WHERE id = #{reg_id}"
    end
    execute "commit"
    

    【讨论】:

      猜你喜欢
      • 2010-11-01
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 2019-09-26
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多