简体   繁体   English

使用模型字段作为Rails迁移中的默认值

[英]Use model field for default value in Rails migration

In my Rails 4 application, I would like to add a 'username' field to my User model. 在我的Rails 4应用程序中,我想向用户模型添加一个“用户名”字段。 Since I already have users in the database, I'd like to use their email (which is currently a part of the model) as the default username in my migration. 由于我已经在数据库中有用户,因此我想在迁移中使用他们的电子邮件(当前是模型的一部分)作为默认用户名。 Here's what I have so far: 这是我到目前为止的内容:

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

So, I'd like do something akin to: 所以,我想做些类似的事情:

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

But that code is not valid. 但是该代码无效。 Any thoughts? 有什么想法吗? Thanks in advance. 提前致谢。

You can solve it like this 你可以这样解决

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM