Rails API как отправить ошибку проверки активной записи? - PullRequest
0 голосов
/ 09 января 2020

У меня есть модель User с validates_uniqueness_of :email. В интерфейсе (реагировать), если я пытаюсь зарегистрироваться по адресу, который уже занят, rails возвращает ошибку 422. Как я могу вместо этого отправить сообщение об ошибке внешнему интерфейсу?

class RegistrationsController < ApplicationController
  def create
    user = User.create!(
      email: params['user']['email'],
      name: params['user']['name'],
      password: params['user']['password'],
      password_confirmation: params['user']['password_confirmation']
    )
    if user
      session[:user_id] = user.id
      render json: {
        status: :created,
        user: user
      }
    else
      render json: { status: 500 }
    end
  end
end

React (ax ios):

.catch(error => {
        console.log("registration error", error);
      });

Консоль отображает ошибку как 422 (Unprocessable Entity) enter image description here

при попытке записать ошибку. В ответе не отображается ошибка activerecord enter image description here

В то время как в консоли rails я вижу ошибку сообщение enter image description here

Решено, проблема была в использовании create!
Удалось отобразить ошибку с помощью

render json: { errors: user.errors.full_messages }, status: 500 error.response.data.errors.join("; ")

Ответы [ 2 ]

1 голос
/ 09 января 2020

Вы используете create!, что означает, что если запись недействительна, возникает исключение, поэтому код, который после этого не будет выполняться.

Вы можете сначала попытаться создать своего пользователя, и затем попытайтесь сохранить его, если он не смог, тогда вы можете отобразить ошибки этого объекта, которые не позволяют сохранить его в базе данных:

user = User.new(
  email: params['user']['email'],
  name: params['user']['name'],
  password: params['user']['password'],
  password_confirmation: params['user']['password_confirmation']
)
if user.save
  session[:user_id] = user.id
  render json: {
    status: :created,
    user: user
  }
else
  render json: { status: 500, errors: user.errors }
end
1 голос
/ 09 января 2020
class RegistrationsController < ApplicationController
  def create
    user = User.new(
      email: params['user']['email'],
      name: params['user']['name'],
      password: params['user']['password'],
      password_confirmation: params['user']['password_confirmation']
    )
    if user.save
      session[:user_id] = user.id
      render json: {
        status: :created,
        user: user
      }
    else
      render json: { errors: user.errors }, status: 500
    end
  end
end

После этого ваши проверки будут доступны здесь:

.catch(error => {
        console.log("registration error", error.response.data.errors);
      });

Таким образом, вы получите массив ошибок проверки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...