Errors.delete(key)刪除屬性的所有錯誤,我只想刪除屬於某個屬性的特定類型的錯誤。以下方法可以添加到任何模型。
返回消息,如果刪除,否則爲零。內部數據結構被修改,因此所有其他方法在錯誤消除後應按預期工作。
下MIT License
方法發佈驗證已運行後,從模型中刪除錯誤。
def remove_error!(attribute, message = :invalid, options = {})
# -- Same code as private method ActiveModel::Errors.normalize_message(attribute, message, options).
callbacks_options = [:if, :unless, :on, :allow_nil, :allow_blank, :strict]
case message
when Symbol
message = self.errors.generate_message(attribute, message, options.except(*callbacks_options))
when Proc
message = message.call
else
message = message
end
# -- end block
# -- Delete message - based on ActiveModel::Errors.added?(attribute, message = :invalid, options = {}).
message = self.errors[attribute].delete(message) rescue nil
# -- Delete attribute from errors if message array is empty.
self.errors.messages.delete(attribute) if !self.errors.messages[attribute].present?
return message
end
用法:
user.remove_error!(:email, :taken)
方法來檢查有效性,除了指定的屬性和消息。
def valid_except?(except={})
self.valid?
# -- Use this to call valid? for superclass if self.valid? is overridden.
# self.class.superclass.instance_method(:valid?).bind(self).call
except.each do |attribute, message|
if message.present?
remove_error!(attribute, message)
else
self.errors.delete(attribute)
end
end
!self.errors.present?
end
用法:
user.valid_except?({email: :blank})
user.valid_except?({email: "can't be blank"})
鐵軌3的,則可以使用errors.delete(:字段)以從集合中刪除一個錯誤。 – 2013-04-09 18:49:09