【发布时间】:2011-04-28 18:15:00
【问题描述】:
在我的更新用户个人资料表单中,第一个字段要求用户输入她当前的密码。当她提交表单时,我会先验证密码,然后再接受其他字段的更改。以下是我目前在用户控制器中执行此操作的方式:
def update
@user = User.find(params[:id])
if @user.has_password?(params[:user][:password])
if @user.update_attributes(params[:user])
flash[:success] = "Profile updated."
redirect_to @user
else
render 'edit'
end
else
flash[:failure] = "Password does not match!"
render 'edit'
end
end
我觉得有更好的方法来做到这一点。例如,我可以使密码匹配用户模型中的验证。然后,formtastic 会自动为我处理错误消息(与上面我丑陋的 flash 方法相反)。我试过这样做
validate :password_match?, :on => :update
还有
def password_match?
has_password(params[:user][:password])
end
但由于模型无法访问可疑参数。
我在 SO 中搜索了 20 分钟以寻找一种方法来执行此操作,但找不到任何不涉及 Devise 或 Authlogic 的内容。我正在从头开始进行身份验证(一切正常:登录、会话等)。
请让我看到更好的道路!
【问题讨论】:
-
如果您使用过devise,这将在edit user registration view 中为您内置
-
下次我肯定会使用设计。我最近学习了 Rails,并遵循了一个涉及从头开始构建身份验证的教程。从那以后,我一直在为我的项目编写代码。
标签: ruby-on-rails