2010-04-21 7 views
0

Je crée un système d'utilisateur pour Rails, et connectez-vous, inscrivez-vous, etc ... tout fonctionne Awesome! Au moins, c'est ce que je pensais. . essayé de mettre à jour l'attribut profile d'un utilisateur, mais je ne pas envoyer un nouveau mot de passe ou nom d'utilisateur avec elle, je l'utilise dans mon modèle User:Mise à jour d'un utilisateur crée un nouveau hachage d'un mot de passe vide :(

protected 

def after_validation 
    self.password = Password::update(self.password) 
end 

les sels de méthode Password::update et HASHES le mot de passe pour la sécurité. Le problème est que, chaque fois que je ne spécifie pas de password lorsque j'économise, Rails essaie de sauvegarder un mot de passe vide. Cependant, mon modèle valide les mots de passe vides, mais un (n) mot de passe vide (hash salé d'un mot de passe vide) est sauvegardé. Mais il ne devrait enregistrer le champ :profile que s'il est le seul donné (et le champ :updated_at). Donc, je veux dire en fait que lorsque je mets à jour l'enregistrement sans spécifier le mot de passe actuel, l'attribut mot de passe est toujours enregistré comme un hachage d'une chaîne vide. Je veux que update_attributes devrait ignorer le mot de passe s'il n'est pas défini.

Quelqu'un peut-il aider? Merci

Répondre

0

je l'ai déjà trouvé moi-même.

je dois vérifier si le mot de passe a changé:

def after_validation 
    self.password = Password::update(self.password) if password_changed? 
end 
0

Je ne suis pas tout à fait sûr que je comprends votre problème, mais que diriez-vous d'ajouter:

validates_presence_of :password 

def before_create 
    self.password = Password::update(self.password) 
end 
+0

Désolé. Je veux dire en fait que lorsque je mets à jour l'enregistrement sans spécifier le mot de passe actuel, l'attribut password est toujours enregistré comme un hachage d'une chaîne vide. Je veux dire que 'update_attributes' devrait ignorer' password' s'il n'est pas défini. –

Questions connexes