我在我的(设计)用户控制器中添加了一个自定义方法:
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控制台,如果我尝试
@user.skip_confirmation!
@save我得到回滚,保存失败。
任何想法都将不胜感激。
附加信息
造成这一问题的原因是
validates_presence_of :password, :password_confirmation在我的用户模型中。尽管用户在注册时输入了密码和密码确认,但这些密码和密码被合并为encrypted_password。例如,当我在控制台中找到一个用户时,用户有一个encrypted_password,但没有密码或password_confirmation。
我试过这个
validates_presence_of :password, :password_confirmation, :on => :create但是,它并不强制用户同时在更改密码屏幕上输入密码和确认密码。
知道怎么绕过这件事吗?
发布于 2013-09-13 19:00:59
我想你误解了skip_confirmation!的工作。
Devise的confirmable模块将向新用户发送一封电子邮件,并将链接返回到您的应用程序。在他们点击那个链接之前,他们将是“未确认的”并且无法登录。skip_confirmation!所做的就是跳过这个工作流程--用户将立即被确认,并且无需先通过电子邮件确认流程就可以登录。
由于对用户模型的验证,您得到了所得到的错误。特别是,您要保存的用户似乎没有现有的密码,因此需要一个password和匹配的password_confirmation属性。
我怀疑有更好的方法来完成你的目标。为什么正常的确认工作流还不够?这个额外的控制器动作想要完成什么?
发布于 2013-09-13 17:54:41
我认为skip_confirmation!实际上是在节省开支。
您要检查的可能是if @user.persisted?
https://stackoverflow.com/questions/18792296
复制相似问题