2011-01-08 17 views
8

rake db:seedを使用して、事前にすべてのアカウントを事前にロードしようとしています。他のすべてのモデルのデータがデータベースに挿入されているように見えますが、何らかの理由で、deviseを使用するPersonモデルの行が作成されません。 Webインターフェイスからの登録はうまくいきますが、手動でアカウントを作成しないようにしたいのですが、理由はrake db:seedを使用しているからです。ウェブインターフェース経由で作成したアカウントからencrypted_pa​​ssword、password_saltをコピーしました。これを回避する方法を教えてください。多くのありがとう..rake db:seed for Rails 3.0を使用してDeviseアカウントを作成できません

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

はところで、ユーザーを播種するこの方法は、非常に効率的ではありませんその電子メールはすでに(別のクエリ)と別の挿入クエリを発行する - これは本当に私のために遅く動作します。私は現在、より良いソリューションを探しています。私はテストのためにシードされた約10万の使用を持つ必要があります... –

答えて

24

私は過去にDeviseを使ってこれを行っています。私は暗号化されたパスワードと塩をそのように設定しようとしなかった。私はちょうどこのようなパスワードと確認を設定しました(私のプロジェクトは便利ではありません)。

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

これを試してみてください。

4

"create"メソッドは、モデル検証のために静かに失敗する可能性が高いため、falseを返します。 「作成」を使用した場合は、エラーを発生させるでしょう。メソッドと感嘆符) - このメソッドは、検証が失敗した場合に例外を発生させます。

あなたのケースでは、検証に失敗する可能性が高い理由は、Devitsのデフォルトではです。最小パスワードの長さは6文字であり、パスワードをまったく提供していないということです。

0

すくいデシベルを実行中に重複をしたくない場合は、次のシードを複数回:を持つユーザーが存在する場合、ユーザーごとにチェックを考案するため

User.create(
    email: email, 
    password: password, 
    password_confirmation: password 
) unless User.where(email: email).exists? 
関連する問題