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.

Jaskółka oknówka
źródło
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 => "[email protected]", :roles => ["admin"], :password => "111111", :password_confirmation => "111111" }).save(false)

W przeciwnym razie zrobiłbym to

User.create!({:email => "[email protected]", :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.

jspooner
źródło
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 => "[email protected]", :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.

Sam Ritchie
źródło
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: '[email protected]', password: 'password', password_confirmation: 'password'})
newuser.skip_confirmation!
newuser.save

b. lub użyj potwierdzenia! :

newuser = User.new({email: '[email protected]', password: 'password', password_confirmation: 'password'})
newuser.confirm!
newuser.save
akbarbin
źródło
6

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

    u = User.new({
      email: '[email protected]',
      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.

Flavio Wuensche
źródło
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: "[email protected]", password: "asdasd", password_confirmation: "asdasd")

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

Ezequiel Ramiro
źródło