我正在尝试实施更改密码视图。目前我正在测试如果我输入密码和password_confirmation不匹配,我会在表单上收到红色错误消息。我得到一个追溯说“验证失败:密码与确认不匹配”,但我没有看到任何基于自然形式的错误消息......
另一个可能有用的信息是我的User模型接受另一个模型(contact_info)的嵌套属性。这些东西都很好。
以下是相关的代码位。从我的模特:
class User < ActiveRecord::Base
devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable
...
end
以下是我的haml视图中的代码:
= form_for @user do |user|
-if @user.errors.any?
#error_explanation
%h2= "#{pluralize(@user.errors.count, "error")} prohibited this user from being saved:"
%ul
- @user.errors.full_messages.each do |msg|
%li= msg
最后,这是来自我的控制器的一点:
...
if @user.update_attributes!(params[:user])
format.html { redirect_to(users_url, :notice => 'User was successfully updated.') }
format.xml { head :ok }
else
...
我能够验证这些字段是否在传入的参数中:
Parameters: {"user"=>{"last_name"=>"Jim", "first_name"=>"Dandy", "email"=>"jim@dandy.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"
我怀疑我错过了一些相当简单的东西......但对于我的生活,我无法弄清楚它可能是什么。
答案 0 :(得分:0)
事实证明,真正缺少的是当前密码 - 我只有密码和password_confirmation字段,而Devise也想要一个current_password字段。
一旦我有了这个字段,我就调用了update_with_password而不是update_attributes,整个事情很好地融合在一起。