我有一个关于在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值?
提前感谢。
不确定您可以这样做,您可以在User
模型中添加before_validation
或before_save
回调:
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