@startuml
participant Controller
participant Service
participant "AR model" as Model

Controller -> Service: call(...)
Service -> Model: save(...)
Controller <- Model: //ActiveRecord::RecordInvalid//
note right
  Exception goes
  through 2 layers
  up to the controller
  until it is rescued.
end note
@enduml

Download controller_rescues_exception.puml

controller_rescues_exception.puml rendered as SVG controller_rescues_exception.puml rendered as SVG
Rendered diagram

PlantUML draws diagrams from plain text. Paste the source into the online server, or render it locally with plantuml -tsvg controller_rescues_exception.puml.