在Rails 3中更新current_user设计的属性

时间:2013-01-30 06:14:26

标签: ruby-on-rails ruby-on-rails-3 devise

我正在使用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 

有什么建议我缺少什么?

1 个答案:

答案 0 :(得分:2)

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

validates :password,:presence=>true

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

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

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