更新用户信息的时候取消对于密码的验证
假设有下面的 model
class User < ActiveRecord::Base
attr_accessible :username, :email, :password
validates :password, :presence => true
end
validates 用来在注册的时候验证密码。
但是用户修改个人信息的时候,我们一般不同时修改密码,用户可以修改密码意外的其他字段,修改页面也没有密码字段。 修改密码是另外独立的一个功能。
@user=User.find(params[:id])
@user.update_attributes(params[:user])
会验证所有的 validates,所以会提示密码不能为空。但是这时候我们不想出现这个提示。
下面这段代码只会更新 email 和 username
@user=User.find(params[:id])
@user.email=params[:user][:email]
@user.username=params[:user][:username]
if @user.update_attribute(:username, params[:user][:username])
flash[:notice]="update user successful"
redirect_to @user
else
flash.now[:notice]="update user fail"
render :edit
end
但是也有遗憾,update_attribute 会 skip_validate,也就是说验证不起作用了,不知道大家碰到这个问题有没有好的解决办法。
devise 里面有一个方法 update_without_password(params[:user]) 可以在更新的时候跳过 password 字段。
参考文档:
How To: Allow users to edit their account without providing a password
http://stackoverflow.com/questions/7083575/updating-user-attributes-without-requiring-password