我正在使用Rails3中的设计。我正面临一个更新用户属性的问题。这是当前用户,当我尝试更新用户时,它不会更新。当我在@ user.errors中看到它时,它说密码不能为空。我已经浏览了devise docs for this并使用了upate_without_password(params [:user]),但没有为我工作。只是为了知道我正在使用Mongodb。我也经历过在stackoverflow中发布的相同问题但不适合我。让我分享一下代码:
用户模型中的: 有这样的密码验证:
validates :password,
presence: true,
confirmation: true,
length: { minimum: 5, maximum: 16 }
用户控制器中的:
protect_from_forgery except: :update
def update
@user = User.find(params[:id])
if @user.update_without_password(params[:user])
sign_in(current_user, :bypass=>true)
respond_to do |format|
format.json {render :json => current_user.to_json(:only => [ :status])}
end
else
respond_to do |format|
format.json {render :json => @user.errors.to_json}
end
end
end
这是我在请求中发送的参数
Parameters: {"user"=>{"status"=>"verified", "_id"=>"user1"}, "id"=>"user1"}
我也试过Rails控制台。我在update_attributes时显示为false,但是当我检查用户对象时,它显示我已更新。
1.9.3p286 :008 > user.update_attributes({"status"=>"verified"})
=> false
有什么建议我缺少什么?
答案 0 :(得分:2)
检查您的用户模型是否已指定:
validates :password,:presence=>true
仅在创建这样的用户时更改上述验证:
validates :password,:presence=>true,:on=>:create
这将在更新时跳过密码验证