0

好ましい方法と既存のテーブルへの一意の列を探しています。また、テーブルに一意のインデックスを追加したいと考えています。ただし、インデックスを追加する前に、インデックスの作成が失敗しないように、列にデータを追加する必要があります。

状況は次のとおりです。

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 コードを使用してデータを入力することが可能であることは知っています。その例はたくさんありますが、それはあまり良い考えではないことを読み続けています。上記のようなもの以外にオプションはありますか?

4

1 に答える 1

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
于 2013-03-30T18:29:05.717 に答える