【发布时间】:2012-04-05 14:38:14
【问题描述】:
我正在尝试在我的应用程序中设置电子邮件验证流程,并且我生成了一个令牌,并在用户注册时向他们发送电子邮件。但是当我点击验证链接时,'users_controller/confirm' 操作中的 if 和 else 语句都会被执行。我被重定向到 root_path 但用户记录中的两个字段被修改。当我从 rails 控制台运行 find_by_token 时,它会返回预期的用户。我正在使用 mysql,我想知道查询中是否存在某种延迟会导致两者都执行。
def confirm
if User.find_by_token(params[:token]).nil?
redirect_to root_path
else
@user = User.find_by_token(params[:token])
cookies[:auth_token] = @user.auth_token
User.skip_callbacks = true
@user.update_attribute(:token, "")
@user.update_attribute(:confirmed, 1)
User.skip_callbacks = false
reset_session
redirect_to routes_path
end
end
【问题讨论】:
-
这似乎极不可能。我建议向条件的每个分支添加一些输出,以便您可以查看执行了哪个。
-
这是剪切粘贴的代码,还是您重新输入的? (我只是想知道如果您重新输入了实际代码中是否存在错字...)
-
同意 - 此代码应按预期工作。如果实际代码略有不同,请注意调用
redirect_to并不会停止操作的执行 - 您需要在它之后返回以强制执行。
标签: ruby-on-rails