Utwórz użytkownika devise z konsoli Ruby


146

Masz jakiś pomysł, jak utworzyć i zapisać nowy obiekt użytkownika za pomocą urządzenia z konsoli ruby?

Kiedy próbowałem to uratować, zawsze robię się fałszywy. Chyba coś mi brakuje, ale nie mogę znaleźć żadnych powiązanych informacji.


1
Nie jest to odpowiedź na twoje pytanie i prawdopodobnie już wiesz o Railcasts, ale uważam, że ten film jest przydatny podczas poznawania Devise: railscasts.com/episodes/209-introducing-devise , railscasts.com/episodes/210-customizing-devise . Mają tam też kilka bardziej przydatnych filmów o Devise. Powodzenia.

2
Tak, obejrzałem ich obu, ale nic nie mówią o tym, o co pytam.
Martin

Odpowiedzi:


197

Możesz dodać false do metody save, aby pominąć sprawdzanie poprawności, jeśli chcesz.

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

W przeciwnym razie zrobiłbym to

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

Jeśli masz confirmablemoduł włączony dla devise, upewnij się, że podczas tworzenia ustawiasz confirmed_atwartość na coś podobnego Time.now.


51
Wygląda na to, że funkcja save (false) jest przestarzała, teraz powinna zostać zapisana (: validate => false)
Martin

9
dzieje się tu tyle magii. Model użytkownika rozszerza moduł Active Record. dlaczego metoda create została nadpisana. Gdzie jest szyfrowane hasło?
codeAnand

2
Co właściwie robi to wezwanie
codeAnand

Wydaje się, że to zły sposób postępowania. Ten sposób wymuszonego sprawdzania poprawności (lub pomijania walidacji) nie ustawia encrypted_password, przez co ten rekord staje się bezużyteczny w prawdziwej aplikacji.
VPaul

79

Powinieneś być w stanie to zrobić za pomocą

u = User.new(:email => "user@name.com", :password => 'password', :password_confirmation => 'password')
u.save

jeśli to zwróci fałsz, możesz zadzwonić

u.errors

aby zobaczyć, co poszło nie tak.


17
Jeśli używasz: confirmable, nie zapomnij również ustawić atrybutu: confirm_at na Time.now, abyś mógł się zalogować od razu.
David Sulc

9
Jako skrót, jeśli używasz Confirmable, zadzwońu.confirm!
kapitanpete

30

Jeśli w Twoim modelu jest opcja: confirmable, oznacza to, że użytkownik obiektu powinien zostać potwierdzony jako pierwszy. Możesz zapisać użytkownika na dwa sposoby.

za. pierwsza to potwierdzenie pominięcia:

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

b. lub użyj potwierdzenia! :

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

6

Jeśli chcesz uniknąć wysyłania e-maili potwierdzających , najlepszym wyborem jest:

    u = User.new({
      email: 'demo@greenant.com.br',
      password: '12feijaocomarroz',
      password_confirmation: '12feijaocomarroz'
    })

    u.confirm
    u.save

Jeśli więc używasz fałszywego e-maila lub nie masz połączenia z Internetem, pozwoli to uniknąć błędów.


Aktualizacja: confirm!jest terazconfirm
Shadow Radiance

2

Żadna z powyższych odpowiedzi nie zadziałała dla mnie.

Oto co zrobiłem:

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

Pamiętaj, że hasło musi być dłuższe niż 6 znaków.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.