呈现 403 验证错误的标准方法

A standard approach to rendering 403 validation errors

我在 rails 控制器中看到的 JSON API 的典型模式

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

这对我来说似乎很合理,但我很少看到这种模式。这让我觉得我没有看到一些重要的东西。

我已经成功使用 save!create!,如果出现问题,它们会引发异常,rescue_fromApplicationController 中捕获这些异常并呈现东西。

像这样:

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