Ruby on Rails

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.

Terminal
$ bundle add escalated

Why 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

1

Install the Gem

bundle add escalated
2

Run the Generator

rails generate escalated:install && rails db:migrate
3

Mount 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.

Ruby
# 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.