簡體   English   中英

Rails - 自定義唯一性驗證

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM