[英]Rails - Custom validation of uniqueness
我想在列(類型字符串)上賦予唯一性,但是問題在於我在使用函數和before_save
將它們插入數據庫之前截斷部分開頭的一些字符串。 因此,rails唯一性驗證不起作用,因為輸入可能與數據庫中的輸入不同,即使在截斷/格式化之后,它們應該是相同的。
我希望能夠先截斷我的字符串,然后驗證它的唯一性,但是我不確定是否可以使用rails validates uniqueness: true
。 我只需要編寫自定義validate
嗎?
Rails回調的順序是:
(-) 救
( - )有效
(1)before_validation
( - )驗證
(2)after_validation
(3)before_save
(4)before_create
(-) 創造
(5)after_create
(6)after_save
(7)after_commit
細節在這里 。 所以你只需做一些像:
validates :your_data_field, uniqueness: true
before_validation :normalize_data
def normalize_data
# Normalize your data here
end
因此它將完全按照您的描述工作,並且不需要編寫和自定義驗證。 它會更漂亮!
如您所述,您將需要創建自定義驗證器並使用validates_with。 有關的信息在這里:
http://apidock.com/rails/ActiveModel/Validations/ClassMethods/validates_with
要遵循DRY原則,並確保截斷邏輯的任何更改都反映在驗證器和before_save回調中,我建議創建一個返回截斷字符串的方法,並在驗證器和回調中使用相同的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.