Active Record 驗證
Active Record 包含大部分來自 ActiveModel::Validations
的驗證。
在 Active Record 中,所有驗證在儲存時預設會執行。 Validations
接受 :on
參數來定義驗證會在什麼情境下執行。Active Record 會傳遞 :create
或 :update
的情境,這取決於模型是否是 new_record?。
實例公開方法
save(**options) 連結
儲存時的驗證程序可以透過傳遞 validate: false
來略過。驗證情境可以透過傳遞 context: context
來變更。當驗證模組混合時,正規的 ActiveRecord::Base#save 方法會被這個方法取代,而這在預設情況下會發生。
來源:顯示 | 在 GitHub 上
# File activerecord/lib/active_record/validations.rb, line 48 def save(**options) perform_validations(options) ? super : false end
save!(**options) 連結
嘗試儲存記錄,就像 ActiveRecord::Base#save 一樣,但如果記錄無效,會引發 ActiveRecord::RecordInvalid
例外,而不是傳回 false
。
來源:顯示 | 在 GitHub 上
# File activerecord/lib/active_record/validations.rb, line 54 def save!(**options) perform_validations(options) ? super : raise_validation_error end
valid?(context = nil) 連結
執行指定內容中的所有驗證。如果沒有找到錯誤,則傳回 true
,否則傳回 false
。
別名為 validate
。
如果參數為 false
(預設為 nil
),則如果 new_record? 為 true
,則將內容設定為 :create
,如果為 false
,則設定為 :update
。如果參數是內容陣列,post.valid?([:create, :update])
,則驗證會在多個內容中執行。
沒有 :on
選項的驗證將在任何內容中執行。具有 :on
選項的驗證只會在指定的內容中執行。
來源:顯示 | 在 GitHub 上
# File activerecord/lib/active_record/validations.rb, line 70 def valid?(context = nil) context ||= default_validation_context output = super(context) errors.empty? && output end