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