在RAILS迁移中将昵称设置为小写的名称

时间:2016-11-04 05:37:34

标签: mysql ruby-on-rails ruby rails-migrations

我正在使用其中有name列的用户模型,但现在我想添加一个昵称列,默认的昵称是用户名为downcase。如何实现这一目标?

2 个答案:

答案 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