我正在使用设计来管理我的应用程序的用户帐户。到目前为止,一切都运行良好,但我偶然发现了我发现非常奇怪的行为。基本上发生的事情是我将以下代码添加到我的用户模型中:
validates :password, { confirmation: true, length: { in: 6..20 } }
validates :username, { uniqueness: true, length: { in: 3..25 } }
乍一看,这似乎工作正常。未能输入有效信息将使用户信息无法保存到数据库中。不幸的是,它以某种方式破坏了设计的电子邮件确认。设计仍然会发送注册电子邮件,但确认链接不像以前那样有效。突然发生的事情是,他将我发送到我可以重新请求确认信息的页面(尽管根本没有被告知这样做)。他还抱怨(通过闪存消息)我的密码不能为“空白”并且用户尚未保存。这是零意义的,因为用户在确认链接被点击之前就已经被保存了(也有一个有效的密码)。事实上,它确实被保存了,因为我发现手动检查数据库表。
我从中收集到的是,他可能正在尝试更改用户表中的某些列,例如 confirm_email 和 confirm_at 等。但不知何故,他也试图同时提供一个新的密码,这绝对不是他应该做的。为什么他将我重定向到那个我可以重新发送确认邮件的页面也完全超出了我的理解。
我能做些什么来解决我的问题?我不想使用 :validatable ,而是在不完全破坏我的设计的情况下进行自己的验证。以下是一些附加信息:
rails 3.2.12
ruby 1.9.3p392 设计 2.2.3
日志:
在 2013-06-20 17:01:12 +0200 开始 GET "/users/confirmation?confirmation_token=ojx35QawQdHSWi655mru" for 127.0.0.1 +0200 处理由 Devise::ConfirmationsController#show as HTML 参数:{"confirmation_token"=>"ojx35QawQdHSWi655mru" } 用户负载 (0.3ms) SELECT "users".* FROM "users" WHERE "users"."confirmation_token" = 'ojx35QawQdHSWi655mru' LIMIT 1 (0.1ms) BEGIN User Exists (0.2ms) SELECT 1 AS one FROM "users" WHERE ("users"."username" = 'what the heck' AND "users"."id" != 22) LIMIT 1 (0.1ms) ROLLBACK Rendered devise/shared/_links.erb (0.4ms) Rendered devise/confirmations /new.html.erb 在布局/应用程序中(2.1 毫秒)在 14 毫秒内完成 200 次 OK(查看:9.0 毫秒 | ActiveRecord:0.8 毫秒)