我已将自定义方法添加到我的(设计)用户控制器:
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_password。例如,当我在控制台中找到用户时,用户有一个encrypted_password,但没有密码或password_confirmation。
我试过这个
validates_presence_of :password, :password_confirmation, :on => :create
但是,它不会强制用户在“更改密码”屏幕上输入密码和确认。
如何解决这个问题?
答案 0 :(得分:1)
我认为你误解了skip_confirmation!
的作用。
Devise的confirmable
模块将向新用户发送一封电子邮件,其中包含一个返回应用程序的链接。在他们点击该链接之前,他们将“未经证实”且无法登录。skip_confirmation!
做的是跳过此工作流程 - 用户将立即得到确认,并且无需先通过电子邮件确认流程。
由于用户模型的验证,您收到了错误。特别是,您尝试保存的用户似乎没有现有密码,因此需要password
并且匹配password_confirmation
属性。
我怀疑有更好的方法来实现你的目的。为什么正常的确认工作流程不够?这个额外的控制器动作试图完成什么?
答案 1 :(得分:0)
我认为skip_confirmation!
实际上是在拯救。
您要检查的内容可能是if @user.persisted?