渲染403验证错误的标准方法

时间:2018-05-17 12:40:11

标签: ruby-on-rails ruby ruby-on-rails-4

我在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

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

1 个答案:

答案 0 :(得分:2)

我使用save!create!取得了成功,如果出现问题则会引发异常,ApplicationController中会rescue_from来捕获这些异常并呈现内容。

这样的事情:

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