我有一个关于将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值?
提前致谢。
答案 0 :(得分:2)
不确定是否可以这样做,您可以在before_validation
模型中添加before_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