0
如果我有這樣一些創造行動之前:軌道4:活動記錄驗證錯誤的:創建
before_create :generate_token
private
def generate_token
self.auth_token = loop do
random_token = SecureRandom.urlsafe_base64(nil, false)
break random_token unless self.class.exists?(auth_token: random_token)
end
end
當寫驗證我發現validates :auth_token, presence: true, on: :create
失敗。 但是,validates :auth_token, presence: true, on: :after_create
的作品。
這是爲什麼?
ref。 Active Record Callback Order和Active Record Validations :on
編輯:奇怪的是,on: :before_create
通過驗證,on: :create
失敗,on: after_create
成功。這是令人費解的,有人可以解釋一下嗎?
我鏈接到兩個文檔,你指的是?後者解釋了「:on選項允許你指定何時進行驗證」。 我很欣賞你的建議,不幸的是你的回答很混亂,也毫無幫助。你指出我在OP中沒有提到的before_create狀態。 – gr8scott06 2014-09-25 01:03:12
假設我這樣做了,並且推斷出你的point-arrow響應轉化爲「驗證失敗,因爲'validate'在活動記錄對象的生命週期中比'before_create'更早發生'」,那麼你的結論仍然是無效的: – gr8scott06 2014-09-25 01:04:10
你上面的邏輯意味着「驗證[也]在create和after_create回調運行之前運行」(after_create在創建之後發生,兩者都在生命週期中驗證之後發生)。 因此,如果before_create失敗,那麼after_create應該失敗,如果(某種程度上)after_create通過了,那麼創建也應該通過。 – gr8scott06 2014-09-25 01:05:34