2

users テーブルのシードに問題があります。

(レール 3.2.6、jruby 1.6.7.2、デバイス 2.1.2)

これは、「rails generate devise User」によって生成された非常に一般的な User テーブルであり、ユーザーが電子メール アドレスではなくユーザー名でログインできるように、このハウツー ページで説明されている変更が加えられています。

rails db:seedエラーの兆候もログもありません。sqlite コンソールを使用して確認すると、テーブルは空です。 はい、開発環境を使用しています。私はこれを二重および三重にチェックしました。

rails console作成コマンドを使用して入力すると、次のようになります。

1178 ~/dev/proj$ rails console
Loading development environment (Rails 3.2.6)
jruby-1.6.7.2 :001 > User.create( 
jruby-1.6.7.2 :002 >       :username             => 'admin',
jruby-1.6.7.2 :003 >       :email                => 'admin@fake.com', 
jruby-1.6.7.2 :004 >       :password             => 'admin',
jruby-1.6.7.2 :005 >       :password_confirmation => 'admin', 
jruby-1.6.7.2 :006 >     )
    User Exists (1.0ms)  SELECT 1 AS one FROM "users" WHERE "users"."email" = 'admin@x.com' LIMIT 1
    => #<User id: nil, email: "admin@fake.com", encrypted_password: "$2a$10$SMz0xdF.BkPV.4IX4TZ6Zu9WbQEk6kvap7mSGfwA7cLe...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: nil, updated_at: nil, username: "admin"> 

次に示すように、テーブルが空であり、まだ空であるため、ユーザーが存在すると表示される理由がわかりません。

jruby-1.6.7.2 :013 > User.all
    User Load (0.0ms)  SELECT "users".* FROM "users" 
=> [] 

検証機能が誤動作している可能性があります。ソースで見つけることができる唯一のものはfind_first_by_auth_conditions、前述のハウツーページから(指示に従って)コピーしたものですが、それがこれを引き起こしているようには見えません.

助けていただければ幸いです。このユーザーを作成できない原因は何ですか?

更新:次を使用すると、動作します:

u = User.new(...)
u.save(:validate=>false) 

つまり、これは私の検証がどこかで失敗していることを意味します。残念ながら、前に述べた 1 つの方法を除いて、検証をコーディングしていません。どうすれば解決できますか?

4

1 に答える 1

10

うーん。このユーザーのパスワードが短すぎることがわかりました。

「ユーザーが存在します」というメッセージは、実際にはかなり誤解を招くようです。パスワード != 確認のユーザーを作成すると、同じことが得られます。

これを改善できるかどうかを確認するために、devise プロジェクトに問題を作成しました。
https://github.com/plataformatec/devise/issues/1985

編集:そして、その問題は解決されました。エラーメッセージの読み方がわからなかったことがわかりました。

于 2012-07-19T16:31:33.880 に答える