Rails迁移 - 非静态默认值

时间:2013-05-09 04:09:25

标签: ruby-on-rails database migration default

我有一个关于将Rails迁移中的列的默认值设置为非静态值的快速问题。

我有一个“Users”表,它已经有列id,first_name和last_name,我想添加一个名为“username”的新列,默认为用户的姓。这就是我目前所拥有的:

class AddLoginToUsers < ActiveRecord::Migration
  def change
    add_column :users, :username, :string, :default => :last_name
  end
end

显然,这不会产生预期的结果(默认为字符串“last_name”)。我如何将默认值设置为行的last_name值?

提前致谢。

1 个答案:

答案 0 :(得分:2)

不确定是否可以这样做,您可以在before_validation模型中添加before_saveUser回调:

class User < ActiveRecord::Base
  before_validation :create_username_if_missing

  private

  def create_username_if_missing
    self.username = last_name unless username
  end
end

在添加回调后更新所有现有用户:

User.where("username is null").each do |user|
  user.update_attributes(username: user.last_name)
end