跳至內容 跳至搜尋

Active Record 驗證

Active Record 包含大部分來自 ActiveModel::Validations 的驗證。

在 Active Record 中,所有驗證在儲存時預設會執行。 Validations 接受 :on 參數來定義驗證會在什麼情境下執行。Active Record 會傳遞 :create:update 的情境,這取決於模型是否是 new_record?

命名空間
方法
S
V
包含的模組

實例公開方法

save(**options)

儲存時的驗證程序可以透過傳遞 validate: false 來略過。驗證情境可以透過傳遞 context: context 來變更。當驗證模組混合時,正規的 ActiveRecord::Base#save 方法會被這個方法取代,而這在預設情況下會發生。

# 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

# 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 選項的驗證只會在指定的內容中執行。

別名也為:validate
# File activerecord/lib/active_record/validations.rb, line 70
def valid?(context = nil)
  context ||= default_validation_context
  output = super(context)
  errors.empty? && output
end

validate(context = nil)

別名為:valid?