Créer un utilisateur de devise à partir de la console Ruby

146

Une idée sur la façon de créer et d'enregistrer un nouvel objet User avec un appareil depuis la console ruby?

Quand j'ai essayé de le sauvegarder, je deviens toujours faux. Je suppose qu'il me manque quelque chose mais je ne parviens pas à trouver d'informations connexes.

Martin
la source
1
Ce n'est pas une réponse à votre question, et vous connaissez probablement déjà Railcasts, mais j'ai trouvé ces vidéos utiles pour en apprendre davantage sur Devise: railscasts.com/episodes/209-introducing-devise , railscasts.com/episodes/210-customizing-devise . Ils ont également quelques vidéos plus utiles sur Devise. Bonne chance.
2
Oui, je les ai regardés tous les deux, mais ils ne disent rien de ce que je demande.
Martin

Réponses:

197

Vous pouvez ajouter false à la méthode save pour ignorer les validations si vous le souhaitez.

User.new({:email => "[email protected]", :roles => ["admin"], :password => "111111", :password_confirmation => "111111" }).save(false)

Sinon je ferais ça

User.create!({:email => "[email protected]", :roles => ["admin"], :password => "111111", :password_confirmation => "111111" })

Si vous avez confirmableactivé le module pour la conception, assurez-vous de définir la confirmed_atvaleur sur quelque chose comme Time.nowlors de la création.

jspooner
la source
51
On dirait que save (false) est désactivé, devrait maintenant être save (: validate => false)
Martin
9
il y a tellement de magie qui se passe ici. Le modèle User étend Active Record. comment se fait-il que la méthode create soit remplacée. Où le mot de passe est-il chiffré?
codeAnand
2
Que fait réellement l'appel de
devise
Cela semble être une mauvaise façon de faire. Cette façon de forcer la validation (ou de sauter la validation) ne définira pas le encrypted_password, rendant ainsi cet enregistrement inutile dans l'application réelle.
VPaul
79

Vous devriez pouvoir le faire en utilisant

u = User.new(:email => "[email protected]", :password => 'password', :password_confirmation => 'password')
u.save

si cela renvoie false, vous pouvez appeler

u.errors

pour voir ce qui ne va pas.

Sam Ritchie
la source
17
Si vous utilisez: confirmable, n'oubliez pas de définir également l'attribut: confirm_at sur Time.now afin de pouvoir vous connecter immédiatement.
David Sulc
9
Comme raccourci, si vous utilisez Confirmable, appelezu.confirm!
captainpete
30

Lorsque votre modèle a: option confirmable, cela signifie que l'utilisateur de l'objet doit d'abord être confirmé. Vous pouvez faire deux manières d'enregistrer l'utilisateur.

une. le premier est ignorer la confirmation:

newuser = User.new({email: '[email protected]', password: 'password', password_confirmation: 'password'})
newuser.skip_confirmation!
newuser.save

b. ou utilisez confirmer! :

newuser = User.new({email: '[email protected]', password: 'password', password_confirmation: 'password'})
newuser.confirm!
newuser.save
akbarbin
la source
6

Si vous souhaitez éviter d'envoyer des e - mails de confirmation , le meilleur choix est:

    u = User.new({
      email: '[email protected]',
      password: '12feijaocomarroz',
      password_confirmation: '12feijaocomarroz'
    })

    u.confirm
    u.save

Donc, si vous utilisez un faux e-mail ou n'avez pas de connexion Internet, cela évitera les erreurs.

Flavio Wuensche
la source
Mise à jour: confirm!est maintenant justeconfirm
Shadow Radiance
2

Aucune des réponses ci-dessus n'a fonctionné pour moi.

C'est ce que j'ai fait:

User.create(email: "[email protected]", password: "asdasd", password_confirmation: "asdasd")

Gardez à l'esprit que le mot de passe doit comporter plus de 6 caractères.

Ezequiel Ramiro
la source