将数据添加到唯一的必需列

时间:2013-03-30 15:37:45

标签: ruby-on-rails migration

我正在寻找首选方式,以及现有表的唯一列。我还想为表添加一个唯一索引。在添加索引之前,我显然需要向列中添加数据以防止索引创建失败。

情况如下:

class AddUsernameToUsers < ActiveRecord::Migration
  def change
    add_column :users, :username, :string, null: false

    # Need Data here! And don't want to do something like this:
    # User.each { |u| u.update_attribute(:username, u.email }

    add_index  :users, :username, unique: true
  end
end

我知道使用ruby代码来填充数据是可能的,有很多例子,但我一直在读它并不是一个好主意。除了类似的东西之外还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

以下情况适用于您的情况吗?

class AddUsernameToUsers < ActiveRecord::Migration
  def change
    add_column :users, :username, :string, null: true

    execute("UPDATE users SET username = email")
    change_column :users, :username, :string, null: false

    add_index  :users, :username, unique: true
  end
end