我正在使用其中有name列的用户模型,但现在我想添加一个昵称列,默认的昵称是用户名为downcase。如何实现这一目标?
答案 0 :(得分:2)
这样做,
class AddNicknameToUser < ActiveRecord::Migration
def change
add_column :users, :nickname, :string
User.update_all("nickname = lower(name)")
end
end
我假设您使用的是postgres.Update,所有这些都比保存每条记录更快。
对于mysql:
class AddNicknameToUser < ActiveRecord::Migration
def change
add_column :users, :nickname, :string
User.update_all("nickname = LOWER(name)")
end
end
编辑:两个版本(低版和低版)都适用于postgres和mysql。
答案 1 :(得分:0)
由于迁移文件为ruby files
,因此您也可以使用迁移文件中的rails models
,
class AddNicknameToUser < ActiveRecord::Migration
def up
add_column :users, :nickname, :string
User.find_each do |user|
user.nickname = user.try(:name).downcase
user.save!
end
end
def down
remove_column :users, :nickname
end
end
您也可以使用,
User.find_each do |user|
user.update_attributes(:nickname => user.try(:name).downcase)
end
修改:
由于您只需要拆分名称的第一个单词,您可以使用
user.try(:name).split.first.downcase