忽略Rails唯一性检查中的空格

时间:2014-02-24 19:51:43

标签: ruby-on-rails validation

在检查字符串是否唯一时,如何忽略空格?例如,如果我的模型只存储一个字符串并且条目是“Hello World”,则应将“HelloWorld”标记为非唯一。有没有办法可以将此子句附加到validates: uniqueness: ...验证器,或者我是否需要编写自己的方法?

2 个答案:

答案 0 :(得分:3)

您必须编写自己的方法:

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

答案 1 :(得分:0)

您还可以尝试添加其他列作为唯一列,并设置验证,如:

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