在 RAILS 迁移中将昵称设置为小写名称
Set nickname to name in downcase in RAILS migration
我正在使用一个用户模型,其中有名称列,但现在我想添加一个昵称列,默认昵称是小写的用户名。如何实现?
由于迁移文件是 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
这样做,
class AddNicknameToUser < ActiveRecord::Migration
def change
add_column :users, :nickname, :string
User.update_all("nickname = lower(name)")
end
end
我假设您正在使用 postgres.Update all 会比保存每条记录更快。
对于mysql:
class AddNicknameToUser < ActiveRecord::Migration
def change
add_column :users, :nickname, :string
User.update_all("nickname = LOWER(name)")
end
end
编辑:两个版本(较低版本和较低版本)都适用于 postgres 和 mysql。
我正在使用一个用户模型,其中有名称列,但现在我想添加一个昵称列,默认昵称是小写的用户名。如何实现?
由于迁移文件是 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
这样做,
class AddNicknameToUser < ActiveRecord::Migration
def change
add_column :users, :nickname, :string
User.update_all("nickname = lower(name)")
end
end
我假设您正在使用 postgres.Update all 会比保存每条记录更快。
对于mysql:
class AddNicknameToUser < ActiveRecord::Migration
def change
add_column :users, :nickname, :string
User.update_all("nickname = LOWER(name)")
end
end
编辑:两个版本(较低版本和较低版本)都适用于 postgres 和 mysql。