rails обновляет текущие атрибуты

#ruby-on-rails #ruby

#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. Я удалил свой ответ, потому что, возможно, неправильно понял ваш вопрос

Ответ №1:

Просто проверьте, установлен ли новый пароль:

 def update
  if user_params[:password] amp;amp; !@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
  

Комментарии:

1. Большое спасибо 🙂