在 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。