Reputation: 806
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
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
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