Crear un usuario ingenioso desde la consola de Ruby

146

¿Alguna idea sobre cómo crear y guardar un nuevo objeto de usuario con idear desde la consola ruby?

Cuando traté de guardarlo, siempre me pongo falso. Supongo que me falta algo, pero no puedo encontrar ninguna información relacionada.

Martín
fuente
1
No es una respuesta a su pregunta, y probablemente ya sepa sobre Railcasts, pero encontré estos videos útiles cuando aprendí sobre Devise: railscasts.com/episodes/209-introducing-devise , railscasts.com/episodes/210-customizing-devise . También tienen algunos videos más útiles sobre Devise. Buena suerte.
2
Sí, los vi a ambos, pero no dicen nada sobre lo que estoy preguntando.
Martin

Respuestas:

197

Puede agregar falso al método de guardar para omitir las validaciones si lo desea.

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

De lo contrario, haría esto

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

Si tiene un confirmablemódulo habilitado para el diseño, asegúrese de establecer el confirmed_atvalor en algo así como Time.nowal crear.

jspooner
fuente
51
Parece que save (false) es depcreated, ahora debería ser save (: validate => false)
Martin
9
Hay tanta magia sucediendo aquí. El modelo de usuario extiende Active Record. ¿Cómo es que se anula el método de creación? ¿Dónde se cifra la contraseña?
codeAnand
2
¿Qué hace realmente la llamada de
dispositivo
Parece una forma incorrecta de hacerlo. Esta forma de validar por la fuerza (u omitir la validación) no establecerá la contraseña cifrada, por lo que este registro será inútil en la aplicación real.
VPaul
79

Deberías poder hacer esto usando

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

si esto devuelve falso, puede llamar

u.errors

para ver qué salió mal.

Sam Ritchie
fuente
17
Si utiliza: confirmable, no olvide establecer también: atributo confirmado_at en Time.now para que pueda iniciar sesión de inmediato.
David Sulc
9
Como atajo, si está usando Confirmable, llame au.confirm!
captainpete el
30

Cuando en su modelo tiene: opción confirmable esto significa que el usuario del objeto debe ser confirmado primero. Puede hacer dos formas de salvar al usuario.

a. primero es omitir la confirmación:

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

si. o use confirmar! :

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

Si desea evitar el envío de correos electrónicos de confirmación , la mejor opción es:

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

    u.confirm
    u.save

Entonces, si está utilizando un correo electrónico falso o no tiene conexión a Internet, eso evitará errores.

Flavio Wuensche
fuente
Actualización: confirm!ahora es soloconfirm
Shadow Radiance
2

Ninguna de las respuestas anteriores funcionó para mí.

Esto es lo que hice:

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

Tenga en cuenta que la contraseña debe tener más de 6 caracteres.

Ezequiel Ramiro
fuente