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.


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 => "guy@gmail.com", :roles => ["admin"], :password => "111111", :password_confirmation => "111111" }).save(false)

Caso contrário, eu faria isso

User.create!({:email => "guy@gmail.com", :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.


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 => "user@name.com", :password => 'password', :password_confirmation => 'password')
u.save

se isso retornar falso, você pode chamar

u.errors

para ver o que deu errado.


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: 'superadmin1@testing.com', password: 'password', password_confirmation: 'password'})
newuser.skip_confirmation!
newuser.save

b. ou use confirmar! :

newuser = User.new({email: 'superadmin2@testing.com', password: 'password', password_confirmation: 'password'})
newuser.confirm!
newuser.save

6

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

    u = User.new({
      email: 'demo@greenant.com.br',
      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.


Atualização: confirm!agora é apenasconfirm
Shadow Radiance

2

Nenhuma das respostas acima funcionou para mim.

Isto é o que eu fiz:

User.create(email: "a@a.com", password: "asdasd", password_confirmation: "asdasd")

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.