更新Rails迁移中的数据库数据

时间:2015-03-22 08:17:17

标签: ruby-on-rails

是否可以更新迁移中的数据库数据?

我有这个迁移:

class FixTokenAuth < ActiveRecord::Migration
  def change
    unless column_exists? :users, :provider
      add_column :users, :provider, :null => false
    end
    unless column_exists? :users, :uid
      add_column :users, :uid, :null => false, :default => ""
    end
    unless column_exists? :users, :tokens
      add_column :users, :tokens, :text
    end
  end
end

我还要添加索引

add_index :users, [:uid, :provider],     :unique => true

当然迁移失败了:uid是&#34;&#34;默认情况下,它不是唯一的。

创建列后,我需要在User模型上执行一个块:

User.all.each{|u|
  u.provider = "email"
  u.save!
}

这样做&#39; uid&#39;字段由数据填充。

是否可以在迁移中添加内容?

1 个答案:

答案 0 :(得分:1)

迁移只是普通的ruby代码,它会被执行,因此您可以做的最好的事情是将change方法更改为up and down。在这些方法中,您可以在add_column语句之后安全地编写更新代码。