A support system that runs on Rails conventions
ActiveRecord models, generators, engine mounting, and the familiar Ruby patterns your team already knows. Escalated is a Rails engine that ships like a gem.
$ bundle add escalatedWhy Escalated
Why Escalated for Rails
ActiveRecord Models
Tickets, replies, tags, and activities are ActiveRecord models. Use scopes, associations, and validations like any model in your app.
Rails Generators
Generate migrations, install config files, and scaffold views with familiar `rails generate` commands. No manual setup required.
Engine Architecture
Mounts as a Rails engine in your `config/routes.rb`. Isolates Escalated routes, controllers, and views while sharing your authentication stack.
Getting Started
How It Works
Install the Gem
bundle add escalatedRun the Generator
rails generate escalated:install && rails db:migrateMount the Engine
Add `mount Escalated::Engine => '/support'` to your routes and you're live.
Features
Built for the Rails ecosystem
ActiveRecord Associations
Tickets belong to users, have many replies, and connect through polymorphic associations. Query them with Arel or scopes.
ActiveJob Integration
Email notifications and webhook dispatches run on ActiveJob. Use Sidekiq, Resque, or any backend your app already uses.
Pundit & CanCanCan Support
Authorization works with standard Ruby authorization libraries. Control access to tickets, replies, and admin functions.
ActiveSupport Callbacks
Every ticket action triggers callbacks. Hook into after_create, after_update, and custom lifecycle events to build workflows.
Rack Middleware
Apply your existing Rack middleware to Escalated routes. Authentication, rate limiting, and tenant scoping work naturally.
FactoryBot Factories
Ships with FactoryBot factories for tickets, replies, and users. Write RSpec or Minitest tests with familiar patterns.
See it in action
A few lines of Ruby to add a full support system to your application.
# config/routes.rb Rails.application.routes.draw do mount Escalated::Engine => '/support' end # app/models/user.rb class User < ApplicationRecord include Escalated::HasTickets end # Anywhere in your application ticket = user.tickets.create!( subject: 'Need help with billing', priority: :high ) ticket.replies.create!( body: "We've updated your invoice.", user: agent )
Ready to add support tickets to your Rails app?
Escalated is open source, self-hosted, and designed to feel like a native part of your Rails application.