0

我在我的(设计)用户控制器中添加了一个自定义方法:

def confirm
    @user = User.find(params[:id])
    @user.skip_confirmation!

    respond_to
        if @user.save 
            //display success message
        else
           // display error message
        end
    end
end

当我尝试通过它确认用户时,保存失败,@user.errors 中有两个错误:密码和密码确认

即使在 Rails 控制台中,如果我尝试

@user.skip_confirmation!
@save

我得到回滚并且保存失败。

任何想法,将不胜感激..

附加信息

造成这种情况的问题是

validates_presence_of :password, :password_confirmation

在我的用户模型中。即使用户在注册时输入了密码和密码确认,它们也会被散列在一起以形成 encrypted_pa​​ssword。例如,当我在控制台中找到一个用户时,该用户有一个 encrypted_pa​​ssword,但没有密码或 password_confirmation。

我试过这个

validates_presence_of :password, :password_confirmation, :on => :create

但是,它不会强制用户在“更改密码”屏幕上同时输入密码和确认。

关于如何解决这个问题的任何想法?

4

2 回答 2

1

我认为你误解了什么skip_confirmation!

Devise 的confirmable模块将向新用户发送一封电子邮件,其中包含返回您的应用程序的链接。在他们单击该链接之前,他们将处于“未确认”状态并且无法登录。skip_confirmation!跳过此工作流程 - 用户将立即得到确认,并且无需先通过电子邮件确认流程即可登录.

由于对用户模型的验证,您会遇到错误。特别是,您尝试保存的用户似乎没有现有密码,因此它需要一个password匹配的password_confirmation属性。

我怀疑有更好的方法来完成你的目的。为什么正常的确认工作流程不够?这个额外的控制器动作试图完成什么?

于 2013-09-13T19:00:59.960 回答
0

我认为skip_confirmation!实际上可以节省。

您要检查的可能是if @user.persisted?

于 2013-09-13T17:54:41.887 回答