我在播放用户表时遇到问题。
(rails 3.2.6,jruby 1.6.7.2,devise 2.1.2)
这是一个非常通用的User表,由“rails generate devise User”生成,加上this howto page描述的修改,以便用户可以使用用户名而不是电子邮件地址登录。
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
我在上述howto页面中复制的(按照指示),但这并不是因为它可能导致这一点。
我很感激任何帮助。什么阻止我创建这个用户?
更新:如果我使用以下内容,则可以:
u = User.new(...)
u.save(:validate=>false)
所以这意味着我的验证在某处失败了。不幸的是,除了前面提到的一种方法,我没有编写任何验证。我该如何解决?
答案 0 :(得分:10)
唉。事实证明这个用户的密码太短了。
看起来“用户存在”消息实际上非常具有误导性。如果你创建一个密码!=确认的用户,它会给你同样的东西。
在设计项目上创建了一个问题,看看是否可以改进。
https://github.com/plataformatec/devise/issues/1985
编辑:该问题已得到解答,我发现我只是不知道如何阅读错误消息。