Crie um usuário ideal no console Ruby

146

Alguma idéia de como criar e salvar um novo objeto Usuário com o design do console ruby?

Quando tentei salvá-lo, estou ficando sempre falso. Acho que estou perdendo alguma coisa, mas não consigo encontrar nenhuma informação relacionada.

Martin
fonte
1
Não é uma resposta para sua pergunta, e você provavelmente já conhece os Railcasts, mas achei esses vídeos úteis ao aprender sobre o Devise: railscasts.com/episodes/209-introducing-devise , railscasts.com/episodes/210-customizing-devise . Eles têm mais alguns vídeos realmente úteis sobre o Devise por lá. Boa sorte.
2
Sim, eu assisti os dois, mas eles não dizem nada sobre o que estou perguntando.
Martin

Respostas:

197

Você pode adicionar false ao método save para ignorar as validações, se desejar.

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

Caso contrário, eu faria isso

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

Se você tiver o confirmablemódulo ativado para criação, verifique se está configurando o confirmed_atvalor para algo como Time.nowdurante a criação.

jspooner
fonte
51
Parece que save (false) foi recriado, agora deve ser save (: validate => false) #
Martin Martin
9
há tanta mágica acontecendo aqui .. O modelo de usuário estende o Active Record. como é que o método de criação é anulado. Onde a senha está sendo criptografada?
codeAnand
2
O que faz a chamada conceber realmente fazer
codeAnand
Parece uma maneira errada de fazer. Essa maneira de validar à força (ou ignorar a validação) não definirá a senha criptografada, tornando esse registro inútil no aplicativo real.
precisa saber é
79

Você deve conseguir fazer isso usando

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

se isso retornar falso, você pode chamar

u.errors

para ver o que deu errado.

Sam Ritchie
fonte
17
Se você usar: confirmable, não se esqueça de também definir: attribute_at attribute para Time.now para que você possa fazer o login imediatamente.
David Sulc 30/11/2010
9
Como atalho, se você estiver usando Confirmable, chamadau.confirm!
captainpete
30

Quando no seu modelo tem: opção confirmable, isso significa que o usuário do objeto deve primeiro confirmar. Você pode fazer duas maneiras de salvar o usuário.

uma. primeiro é pular confirmação:

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

b. ou use confirmar! :

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

Se você deseja evitar o envio de e-mails de confirmação , a melhor opção é:

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

    u.confirm
    u.save

Portanto, se você estiver usando um e-mail falso ou não tiver conexão com a Internet, isso evitará erros.

Flavio Wuensche
fonte
Atualização: confirm!agora é apenasconfirm
Shadow Radiance
2

Nenhuma das respostas acima funcionou para mim.

Isto é o que eu fiz:

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

Lembre-se de que a senha deve ter mais de 6 caracteres.

Ezequiel Ramiro
fonte