我在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
这对我来说似乎很合理,但我没有看到这种模式。这让我觉得我没有看到重要的东西。
答案 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