user2784630
user2784630

Reputation: 806

How do I check if a username exists and create a new one if it does?

I want to create a user with user.name, which can be changed later. The user.name is unique, and I generate a name starting with "user" followed by random numbers. This is how my model looks:

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

This does create a user with a name like "user12345634", but I want to check if that name already exists, and then do a different one if it does. How could I do this?

Upvotes: 1

Views: 88

Answers (2)

apeniche
apeniche

Reputation: 669

You can achieve it the following way:

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

Hope it helps!

Upvotes: 2

cjav_dev
cjav_dev

Reputation: 3105

You might check to see if it exists already if so generate a new one.

  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

Upvotes: 1

Related Questions