Skip to content

Instantly share code, notes, and snippets.

@mrgenixus
Created May 17, 2023 23:42
Show Gist options
  • Save mrgenixus/46a5a4fe120c8d2773fedc146009926d to your computer and use it in GitHub Desktop.
Save mrgenixus/46a5a4fe120c8d2773fedc146009926d to your computer and use it in GitHub Desktop.
Generalized controller error handling
module ErrorHandling
def respond_with_errors(error: nil, resource: nil, status: 422, **options)
add_error(:base, error) if error.present?
self.errors = resource.errors if resource&.errors&.is_a? ActiveModel::Errors
render json {
error: errors.full_messages.to_sentence,
errors: errors,
full_errors: errors.full_messages,
success: false,
}, status: status, **options
end
def errors= errors
if errors.is_a? ActiveModel::Errors
_errors = @_errors || []
@_errors = errors
_errors.each do |(name, message)|
@_errors.add(name, message)
end
end
end
def add_error name, message
errors.add(name, message)
end
def set_error_resource name
errors.name = name
end
return errors
@_errors ||= ActiceModel::Errors.new.tap {|e| e.name = request.resource_name }
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment