0

我正在使用 Rails3 中的设计。我面临一个更新用户属性的问题。这是当前用户,当我尝试更新用户时,它没有更新。当我在@user.errors 中看到时,它说密码不能为空。我已经为此浏览了设计文档并使用了 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 时显示为假,但当我检查用户对象时,它显示我已更新。

1.9.3p286 :008 > user.update_attributes({"status"=>"verified"})
 => false 

有什么建议我缺少什么吗?

4

1 回答 1

2

检查您的用户模型是否已指定:

validates :password,:presence=>true

将上述验证更改为仅在创建这样的用户时完成:

validates :password,:presence=>true,:on=>:create

这将在更新时跳过密码验证

于 2013-01-30T06:30:52.703 回答