2

我在播种用户表时遇到问题。

(轨道 3.2.6,jruby 1.6.7.2,设计 2.1.2)

这是一个非常通用的用户表,由“rails generate devise User”生成,加上这个howto页面描述的修改,以便用户可以使用用户名而不是电子邮件地址登录。

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) 

所以这意味着我的验证在某个地方失败了。不幸的是,除了我前面提到的一种方法之外,我还没有编写任何验证代码。我该如何解决?

4

1 回答 1

10

啊。事实证明,这个用户的密码太短了。

看起来“用户存在”消息实际上非常具有误导性。如果您创建一个密码!= 确认的用户,它会给您同样的事情。

在设计项目上创建了一个问题,看看是否可以改进。
https://github.com/plataformatec/devise/issues/1985

编辑:这个问题得到了回答,我发现我只是不知道如何阅读错误消息。

于 2012-07-19T16:31:33.880 回答