2011-01-08 12 views
8

Próbuję wstępnie wczytać wszystkie konta programowe z góry za pomocą rake db: seed. Dane dla wszystkich innych modeli wydają się być wstawione do bazy danych, ale z jakiegoś powodu dla modelu Person nie są tworzone żadne wiersze, które wykorzystują programowanie. Rejestracja z interfejsu sieciowego działa dobrze, ale chcę uniknąć tworzenia kont ręcznie, to jest powód, dla którego używam rake db: seed. Skopiowałem hasło encrypted_password, password_salt z konta utworzonego za pomocą interfejsu internetowego. Daj mi znać, jak sobie z tym poradzić? Wielkie dzięki ..Nie można utworzyć konta Devise za pomocą rake db: seed dla Rails 3.0

people = Person.create(
         :email => '[email protected]', 
         :encrypted_password => '$2a$10$SyacAOhJQtVeTcTPYm.ROuFbhGMylfj4fLrK3NHyeRwfEokKp2NVW', 
         :password_salt => '$2a$10$SyacAOhJQtVeTcTPYm.ROu', 
         :first_name => "nnn", 
         :last_name => "yyy" 
         ) 


in routes.rb i have. 

    devise_for :people 
+0

BTW, ta metoda siewu użytkowników nie jest bardzo wydajne, ponieważ dla każdego użytkownika Opracować sprawdza, czy użytkownik znajduje się z ten e-mail już (oddzielne zapytanie) i wystawia osobne zapytanie o wstawianie - działa to bardzo powoli. Obecnie szukam lepszych rozwiązań. Muszę mieć około 100 000 zastosowań do testów ... –

Odpowiedz

24

Zrobiłem to za pomocą Devise w przeszłości. Nie próbowałem ustawić zaszyfrowanego hasła i soli w ten sposób. Właśnie ustawiłem hasło i potwierdzenie czegoś takiego (nie mam przy sobie mojego projektu):

Person.create(:email => '[email protected]', :password => 'foobar', :password_confirmation => 'foobar', :first_name => 'nn', :last_name => 'yy') 

Spróbuj tego.

4

Najprawdopodobniej metoda "create" nie działa po cichu ze względu na walidację modelu, dlatego zwraca wartość false. Powinieneś zasiać błędy, jeśli użyłeś słowa "stwórz!" metoda zamiast (z wykrzyknikiem) - ta metoda podnosi wyjątek, jeśli sprawdzanie poprawności nie powiedzie się.

Prawdopodobną przyczyną niepowodzenia sprawdzania poprawności w danym przypadku jest to, że (domyślnie dla Devise) minimalna długość hasła wynosi 6 znaków, a użytkownik w ogóle nie podawał hasła.

0

Jeśli nie chcesz duplikaty podczas uruchamiania rake db: seed wielokrotnie:

User.create(
    email: email, 
    password: password, 
    password_confirmation: password 
) unless User.where(email: email).exists? 
Powiązane problemy