假設我在Dummy
模型上有registration_id
屬性。 它的數據類型是字符串。 它的長度可以是10-14個字符之間的任何東西,但是我想僅在最後10個字符處提供唯一性驗證。 (奇怪,但真)驗證ActiveRecord中字符串部分的唯一性
現在我該如何實現這一目標?
我所想的:
在
Dummy
表創建另一個屬性last_ten_chars_registration_id
舉行最後的10個字符,並把唯一該屬性。 (由於計算屬性顯然不適用於唯一性驗證)我可以創建自定義驗證器並編寫查詢。 我不知道(可能爲
like
查詢)
任何人都可以給我建議任何更好的方法來實現這一目標?
http://guides.rubyonrails.org/active_record_validations.html#performing-custom-validations –
我喜歡'last_ten_chars_registration_id'的想法。您可以對列進行索引,以獲得這些唯一性查詢的良好性能。數據庫性能並不完全是我的舵手,但我會想象隨着時間的推移和增長,「像」查詢不會如此高效。 – GoGoCarl
不完全不同意,但通過優化標準化。除非有優化的理由,例如數百萬條記錄或緩慢的查詢,否則我仍然相信LIKE檢查更好。如果你有兩列有相同的數據,那麼你有多確定它永遠不會失去同步,保持它們匹配需要額外的邏輯。自定義驗證強制執行業務邏輯,即不能使用具有相同最後10個字符的註冊ID的兩條記錄。 – SacWebDeveloper