Ultimate

Migrating from Rails

The concept map for a Rails app. The runbook — phases, exit conditions, stop conditions — is Migrating an existing app; this page says what each Rails term becomes. As of 2026-11, against Rails 8 (guides.rubyonrails.org).

Concept map

RailsUltimate
config/routes.rb + a controller action that rendersa route file: Routes and render modes
a controller action that writesan action: Actions
an Active Record modelan entity(): Entities and migrations
a scope, a where chaina query: Queries and live queries
db/migrate/*.rb, schema.rbx db gen "<name>", then x db migrate
rails generatex g <kind> <name> (CLI reference)
Active Job, Sidekiqa job: Jobs and workflows
whenever, sidekiq-crona task: Scheduled tasks
Devise, has_secure_passwordAuth
Pundit, CanCanCana policy: Policies and authz
Action Cable, Turbo Streamsa live query: Realtime
Action MailerMail
Active StorageStorage and uploads
ActiveAdmin, AdministrateAdmin dashboard
config/locales/*.ymlone flat catalog per locale: I18n
RSpec, MinitestTesting
bin/rails serverx dev
bin/rails test + CIx verify

What does not map

RailsWhy
Ruby and its gemsBun only. Nothing runs Ruby; a gem's behaviour is rewritten or bought as a service
MySQL, SQLitePostgres only, by design: Home
ERB, Hotwire, Stimuluspages render with SolidJS; interactive parts are islands (Routes and render modes). No converter
model callbacks (before_save, after_commit)no implicit hooks: the write is an action or a mutator that says what it does (Actions)
SAML (devise_saml_authenticatable)not shipped: put an OIDC bridge in front (Auth)

Schema adoption

Rails ids are bigint sequences and timestamps are created_at / updated_at. Phase 1 of the runbook declares the existing tables as entities with the physical-name overrides and type map it gives, then x db gen until x verify --only drift agrees: Migrating an existing app.

Identity cutover

Rails storesBranch
password_digest (has_secure_password) or Devise's encrypted_password — bcrypt by defaultproceed: verified natively, rewritten as argon2id on first login (Migrating an existing app)
the session: an encrypted cookie keyed by secret_key_basebridge it with your own verifier behind configureAuthenticator(), or keep the Rails login until every user has signed in once (Auth)

Edit this page on GitHubThis page as markdown