Rails Validation pour les e-mails des utilisateurs - uniquement pour la validation lorsqu'un utilisateur s'inscrit ou met à jour son adresse e-mail
J'ai un modèle Utilisateur avec les attributs habituels tels que le courrier électronique et hashed_password etc. Je veux écrire une validation qui vérifie la présence d'une adresse e-mail mais uniquement lorsque
1) il n'y a pas stockées dans la base de données pour cet objet (c'est un nouvel utilisateur de la signature)
2) l'utilisateur est en train d'essayer de mettre à jour leur adresse de courriel.
Mes validations
validates_presence_of :email
validates_presence_of :email_confirmation
validates_confirmation_of :email
sont évidemment me prévenir de la mise à jour des attributs. J'ai pensé à utiliser
validates_presence_of :email , :si :email_validation_required?
def email_validation_required?
self.email.blank?
end
Mais que l'habitude de l'aide avec le scénario 2, qui renvoie true car l'utilisateur ne dispose pas de mot de passe adresse e-mail dans la db.
Je ne peux pas savoir comment je peux limiter à ces 2 scénarios ci-dessus.
Peut aider quelqu'un?
source d'informationauteur robodisco
Vous devez vous connecter pour publier un commentaire.
Je pense que EmFi est à quelque chose. Mais je ne pense pas que le
validates_presence_of :email
devrait être tenue de vous. Leemail
doit toujours être présente, si elle est laissée en blanc dans le formulaire le paramètre ne perturbera pas vos économiser de l'utilisateur. Si il est saisi dans le formulaire, même pour la mise à jour, il devrait avoir unemail_confirmation
long de la balade.Donner à ceci un essai:
vous avez deux options. la première consiste à utiliser
:on
. par défaut, ils sont mis à:on => :save
mais vous pouvez faire quelque chose comme ceou
les autres options est d'utiliser
:if
et puis la passer dans un nom de méthode ou d'un proc. donc, quelque chose commeou
Espère que cela aide 🙂
Vous souhaitez utiliser un :si la clause relative à la validation qui utilise le ActiveRecord::Sale méthodes:
N. B. ne fonctionne que dans les Rails 2.1 ou ultérieure.