2016-03-18 101 views
1

在我的Rails 4應用程序中,我想爲我的用戶模型添加一個「用戶名」字段。由於我已經擁有數據庫中的用戶,因此我希望將他們的電子郵件(目前是模型的一部分)用作遷移中的默認用戶名。這是我到目前爲止有:在Rails遷移中使用模型字段作爲默認值

class AddUsernameColumnToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :username, :string, null: false 
    add_index :users, :username, unique: true 
    end 
end 

所以,我希望做一個類似於:

add_column :users, :username, :string, null: false, default: this.email 

但這些代碼是無效的。有什麼想法嗎?提前致謝。

回答

2

你可以解決它像這樣

 
class AddUsernameColumnToUsers < ActiveRecord::Migration 
    def up 
    add_column :users, :username, :string, null: false 
    add_index :users, :username, unique: true 
    query = 'UPDATE users SET username = email' 
    ActiveRecord::Base.connection.execute(query) 
    end 
    def down 
    remove_column :users, :username 
    end 
end 

+0

我不得不做出小幅調整,以避免空:假的約束:'code' add_column:用戶:用戶名:字符串 查詢=「更新用戶設置用戶名= email' ActiveRecord :: Base.connection.execute(query) add_index:users,:username,unique:true change_column:users,:username,:string,:null => false'code' –

+0

否則 - 您的邏輯工作。謝謝! –