rails迁移脚本VS控制台

时间:2010-12-16 03:02:03

标签: ruby-on-rails console data-migration

所以我试图在迁移脚本中迁移一些数据,但数据似乎没有保存。但是,如果我复制代码并直接在控制台中运行它,它会保存。任何人都可以帮我找出原因吗?

这是我的迁移脚本中的代码。我正在将我的头像数据从自己的表格移动到我的个人资料表中。

  def self.up
    add_column :users,    :featured,            :boolean, :default => false
    add_column :profiles, :avatar_file_name,    :string
    add_column :profiles, :avatar_content_type, :string
    add_column :profiles, :avatar_file_size,    :integer
    add_column :profiles, :avatar_updated_at,   :datetime

    Avatar.all.each do |a|
      user = User.find(a.user_id)
      user.profile.avatar_file_name = a.avatar_file_name
      user.profile.avatar_content_type = a.avatar_content_type
      user.profile.avatar_file_size = a.avatar_file_size
      user.profile.avatar_updated_at = a.updated_at
      if a.featured == true
        user.featured = true
      end
      user.save
    end

    # drop_table :avatars
  end

1 个答案:

答案 0 :(得分:5)

我认为这是因为您正在更改列并尝试在同一次迁移中使用它们,但模型不知道这些字段。

尝试在Avatar.all.each ...

上方添加这些行
User.reset_column_information
Profile.reset_column_information

有关此http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-c-reset_column_information

的更多信息