Rails更新当前属性

时间:2019-03-18 12:03:51

标签: ruby-on-rails ruby

我有一个简单的更新操作。但我有一点问题。 我想要的是: 如果尝试更改密码,则应填写旧密码,但是如果尝试更改其他字段,例如名称,电子邮件,旧密码,则不需要。怎么写呢?请帮帮我。

这是我的旧代码:

# PATCH/PUT /users/1
def update
  if @user.authenticate(user_params[:password_old])
    @user.update_attributes(user_params)
    head :no_content
  else
    render json: { message: 'old password incorrect' }, status: :unprocessable_entity
  end
end

这是我对新实现的更改:

def update
  if @user.authenticate(user_params[:password_old])
    @user.update_attributes!(user_params[:password, :password_confirmation])
    head :no_content
  else
    render json: { message: 'old password incorrect' }, status: :unprocessable_entity
  end
  @user.update_attributes!(user_params)
  head :no_content
end

1 个答案:

答案 0 :(得分:0)

只需检查是否设置了新密码:

def update
  if user_params[:password] && !@user.authenticate(user_params[:password_old])
    render json: { message: 'old password incorrect' }, status: :unprocessable_entity
    return
  end
  @user.update_attributes!(user_params)
  head :no_content
end