Ruby on rails Rails迁移无法识别新列

Ruby on rails Rails迁移无法识别新列,ruby-on-rails,rails-migrations,Ruby On Rails,Rails Migrations,我试图通过迁移来转移一些数据。在上一次迁移中,我运行了以下操作: add_column :portfolios, :owner_id, :integer 然后在下面的迁移中如下所示: 类MoveUserIdToPortfolio

我试图通过迁移来转移一些数据。在上一次迁移中,我运行了以下操作:

add_column :portfolios, :owner_id, :integer
然后在下面的迁移中如下所示: 类MoveUserIdToPortfolio
  class Stake < ActiveRecord::Base
  end

  class UserStakeInPortfolio < Stake
    belongs_to :portfolio, foreign_key: :possession_id

    def self.sti_name
      'UserStakeInPortfolio'
    end
  end

  class User < ActiveRecord::Base
    has_many :user_stake_in_portfolios, foreign_key: :owner_id
    has_many :portfolios, through: :user_stake_in_portfolios
    has_many :personal_portfolios, through: :user_stake_in_portfolios, :class_name => 'PersonalPortfolio', :source => :portfolio, :conditions => { :type => 'PersonalPortfolio' }

    def personal_portfolio
      self.personal_portfolios.first
    end
  end

  class Portfolio < ActiveRecord::Base
  end

  class PersonalPortfolio < Portfolio

    def self.sti_name
      'PersonalPortfolio'
    end
  end

  def up

    puts "DEBUG: #{Portfolio.inspect}"

    Portfolio.connection.schema_cache.clear!
    Portfolio.reset_column_information
    PersonalPortfolio.connection.schema_cache.clear!
    PersonalPortfolio.reset_column_information
    User.connection.schema_cache.clear!
    User.reset_column_information

    puts "DEBUG2: #{Portfolio.inspect}"

    User.all.each do |user|
      pp = user.personal_portfolio
      puts "DEBUG3: #{pp.inspect}"
      pp.owner_id = user.id
      pp.save
      puts "DEBUG4: #{pp.inspect}"
    end

  end

  def down

  end
end
DEBUG
语句显示一个
Portfolio
,没有
owner\u id
属性。但是
DEBUG2
会用一个输出它。但是这两个
pp.inspect
输出都不显示具有
owner\u id
的实例


如果有帮助,很乐意提供更多信息

你能把“保存”改为“保存”吗!,因此,我们可以看到引发的异常(如果有的话)。此外,我几乎总是喜欢在迁移中使用update_all,以便迁移尽可能独立于模型代码。在迁移中使用活动记录可能会导致您遇到在没有正确版本的模型代码的情况下无法运行迁移的情况。使用
save时不会产生任何错误。同样的事情也会发生。此外,不确定在这种情况下如何使用update_all,因为每个投资组合的价值不同。
(0.1ms)  BEGIN
(0.3ms)  UPDATE `portfolios` SET `updated_at` = '2013-09-11 22:16:06' WHERE `portfolios`.`type` IN ('PersonalPortfolio') AND `portfolios`.`id` = 4
(0.4ms)  COMMIT