首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计.skip_confirmation!不是存钱

设计.skip_confirmation!不是存钱
EN

Stack Overflow用户
提问于 2013-09-13 17:47:48
回答 2查看 310关注 0票数 0

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

代码语言:javascript
复制
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_confirm。

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

代码语言:javascript
复制
@user.skip_confirmation!
@save

我得到回滚,保存失败。

任何想法都将不胜感激。

附加信息

造成这一问题的原因是

代码语言:javascript
复制
validates_presence_of :password, :password_confirmation

在我的用户模型中。尽管用户在注册时输入了密码和密码确认,但这些密码和密码被合并为encrypted_password。例如,当我在控制台中找到一个用户时,用户有一个encrypted_password,但没有密码或password_confirmation。

我试过这个

代码语言:javascript
复制
validates_presence_of :password, :password_confirmation, :on => :create

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

知道怎么绕过这件事吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-13 19:00:59

我想你误解了skip_confirmation!的工作。

Devise的confirmable模块将向新用户发送一封电子邮件,并将链接返回到您的应用程序。在他们点击那个链接之前,他们将是“未确认的”并且无法登录。skip_confirmation!所做的就是跳过这个工作流程--用户将立即被确认,并且无需先通过电子邮件确认流程就可以登录。

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

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

票数 1
EN

Stack Overflow用户

发布于 2013-09-13 17:54:41

我认为skip_confirmation!实际上是在节省开支。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18792296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档