3
如何在檢查字符串是否唯一時忽略空格?例如,如果我的模型只存儲一個字符串,並且條目是「Hello World」,則應將「HelloWorld」標記爲非唯一。有沒有一種方法可以將此子句附加到驗證程序validates: uniqueness: ...
,還是需要編寫我自己的方法?忽略Rails唯一性檢查中的空格
如何在檢查字符串是否唯一時忽略空格?例如,如果我的模型只存儲一個字符串,並且條目是「Hello World」,則應將「HelloWorld」標記爲非唯一。有沒有一種方法可以將此子句附加到驗證程序validates: uniqueness: ...
,還是需要編寫我自己的方法?忽略Rails唯一性檢查中的空格
你將不得不編寫您自己的方法:
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
您也可以嘗試增加一個額外的列作爲一個唯一的列的使用和設置您的驗證,如:
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
感謝這個回答。我只是試圖實現它,但它允許我保存兩個名字,第一個字母是大寫,即'Hello world'和'hello world',它們是同一個條。有沒有一種快速的方法來檢查數據庫記錄的唯一性,忽略空間和首都?或者@T J的答案低於最佳解決方案? –
你可以添加一個where子句:如果self.class.where(「LOWER(name)=?」,name).exists?'或PostgreSQL'如果self.class.where('name ILIKE?',name) ' – MrYoshiji
謝謝,我稍後再嘗試 –