Errors.delete (chiave) rimuove tutti gli errori per un attributo e desidero solo rimuovere un tipo specifico di errore appartenente a un attributo. Questo metodo seguente può essere aggiunto a qualsiasi modello.
Restituisce il messaggio se rimosso, altrimenti nulla.Le strutture dei dati interne vengono modificate, quindi tutti gli altri metodi dovrebbero funzionare come previsto dopo la rimozione degli errori.
rilasciato sotto Metodo MIT License
eliminare l'errore dal modello convalide sono stati eseguiti.
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
Usage:
user.remove_error!(:email, :taken)
metodo di verifica della validità tranne gli attributi e messaggi specificati.
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
Usage:
user.valid_except?({email: :blank})
user.valid_except?({email: "can't be blank"})
A partire da Rails 3, è possibile utilizzare errors.delete (: field) per rimuovere un errore dalla raccolta. –