2011-01-08 24 views
8

Tôi đang cố tải trước tất cả các tài khoản dự phòng bằng cách sử dụng rake db: seed. Dữ liệu cho tất cả các mô hình khác dường như được chèn vào trong cơ sở dữ liệu nhưng vì một số lý do NO hàng được tạo ra cho mô hình Person sử dụng phát minh. Đăng ký từ giao diện web hoạt động tốt, nhưng tôi muốn tránh tạo tài khoản theo cách thủ công, đó là lý do tôi đang sử dụng rake db: seed. Tôi đã sao chép encrypted_password, password_salt từ một tài khoản được tạo thông qua giao diện web. Xin vui lòng cho tôi biết làm thế nào để có được xung quanh này? Rất cám ơn ..Không thể tạo tài khoản Devise bằng rake db: seed for 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, phương pháp này của người sử dụng gieo hạt không phải là rất hiệu quả, bởi vì đối với mỗi người dùng Vạch kiểm tra nếu có một người dùng với email đó đã có (một truy vấn riêng biệt) và các vấn đề một truy vấn chèn riêng biệt - điều này làm việc rất chậm đối với tôi. Tôi hiện đang tìm kiếm các giải pháp tốt hơn. Tôi cần phải có khoảng 100.000 sử dụng hạt giống để thử nghiệm ... –

Trả lời

24

Tôi đã thực hiện việc này bằng cách sử dụng Devise trong quá khứ. Tôi đã không thử thiết lập mật khẩu được mã hóa và muối theo cách đó. Tôi chỉ cần đặt mật khẩu và xác nhận một cái gì đó như thế này (Tôi không có dự án của tôi tiện dụng):

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

Hãy thử điều đó.

4

Rất có thể phương thức "tạo" không thành công do xác thực mô hình và do đó trả về false. Bạn sẽ gieo hạt lỗi nếu bạn sử dụng "tạo!" phương pháp thay thế (với dấu chấm than) - phương pháp này làm tăng ngoại lệ nếu xác thực không thành công.

Lý do có khả năng xảy ra lỗi xác thực trong trường hợp của bạn là (theo mặc định cho Devise) độ dài mật khẩu tối thiểu là 6 ký tự và bạn không cung cấp mật khẩu nào cả.

0

Nếu bạn không muốn bản sao trong khi chạy rake db: hạt giống nhiều lần:

User.create(
    email: email, 
    password: password, 
    password_confirmation: password 
) unless User.where(email: email).exists? 
Các vấn đề liên quan