Стандартный подход к отображению 403 ошибок проверки - PullRequest
0 голосов
/ 17 мая 2018

Типичный шаблон, который я вижу в контроллерах рельсов для API JSON

success = @my_object.save
if success
  render @my_object, serializer: SomeSerializer
else
  my_custom_error_reporting_method @my_object
end

Но это становится чрезвычайно повторяющимся.Есть ли известный метод хорошей практики для сушки этого?

Я думал о том, чтобы иметь

def my_error_handling_render_method(target_object, options)
  if target_object.errors.empty?
    render target_object, options
  else
    my_custom_validation_error_raising_method target_object
  end
end

Это позволило бы контроллерам просто сделать

@my_object.save
my_error_handling_render_method @my_object, serializer: SomeSerializer

ЭтоМне кажется разумным, но я не вижу такой картины вокруг.Это заставляет меня думать, что что-то важное я не вижу.

1 Ответ

0 голосов
/ 17 мая 2018

Я успешно использовал save! и create!, которые вызовут исключения, если что-то пойдет не так, и rescue_from в ApplicationController, чтобы перехватить эти исключения и отрендерить что-либо.

Примерно так:

class ApplicationController < ActionController::Base
  rescue_from ActiveRecord::RecordInvalid, with: ->(error) do
    # render something
  end
end

class UsersController < ApplicationController
  def create
    @user = User.new(user_params)
    @user.save!
    render @user, serializer: UserSerializer
  end
end
...