如何检查用户名是否存在并创建新用户名?

时间:2014-08-13 23:33:59

标签: ruby-on-rails ruby

我想创建一个user user.name,可以在以后更改。 user.name是唯一的,我生成一个以"user"开头的名称,后跟随机数字。这就是我的模型的样子:

class User < ActiveRecord::Base
  before_validation :set_a_name, on: :create

  validates :name, presence: true,
  uniqueness: { case_sensitive: false }

  private

  def set_a_name
    if self.name.blank?
      random_user_number = rand.to_s[2..11]
      self.name = "user#{random_user_number}"
    end
  end
end

这确实会创建一个名为"user12345634"的用户,但我想检查该名称是否已存在,然后再执行另一个名称。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

您可以通过以下方式实现:

def set_a_name
  while self.name.blank? or User.find_by_name(self.name).present?
    random_user_number = rand.to_s[2..11]
    self.name = "user#{random_user_number}"
  end
end

希望它有所帮助!

答案 1 :(得分:1)

如果是这样,你可能会检查它是否已经存在。

  def set_a_name
    return unless self.name.blank?

    begin
      random_user_number = rand.to_s[2..11]
      try_name = "user#{random_user_number}"
    end while User.exists?(name: try_name)

    self.name = try_name
  end