Ignore Rails Uniqueness Checks

How can I ignore spaces when I check if a string is unique? For example, if my model simply stores the string and the record is “Hello World”, “HelloWorld” should be marked as not unique. Is there a way to bind this sentence to a validator validates: uniqueness: ..., or do I need to write my own method?

+3
source share
2 answers

You will have to write your own method:

before_save :check_name_uniqueness

def check_name_uniqueness
  name = self.name.presence
  if name
    name = name.downcase.gsub(" ", "").strip.squish
    if self.class.exists?(name: name)
      self.errors.add(:base, "already existing name")
      return false
    else
      return true
    end
  else
    self.errors.add(:name, "cant be blank")
    return false
  end
end
+3
source

You can also try adding an extra column to use as a unique column and customize your validation as follows:

before_validation :set_unique_name
validates :unique_name, :uniqueness => {:message => "name is already taken"}

def set_unique_name
  self.unique_name = self.name.downcase.gsub(" ", "").strip
end
0
source

All Articles