0

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

我有一个“用户”表,其中已经包含 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 值?

提前致谢。

4

1 回答 1

2

不确定你能做到这一点,你可以在你的模型中添加一个before_validationorbefore_save回调:User

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
于 2013-05-09T05:26:11.337 回答