设计.skip_confirmation!没有储蓄

时间:2013-09-13 17:47:48

标签: ruby-on-rails devise

我已将自定义方法添加到我的(设计)用户控制器:

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中有两个错误:password和password_confirm

即使在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

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

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我认为你误解了skip_confirmation!的作用。

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

由于用户模型的验证,您收到了错误。特别是,您尝试保存的用户似乎没有现有密码,因此需要password并且匹配password_confirmation属性。

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

答案 1 :(得分:0)

我认为skip_confirmation!实际上是在拯救。

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