mcpField
R
rails-architecture

rails-architecture

github.com/thibautbaissacDevelopment67174 installsUpdated 21w ago
Repository

About rails-architecture

A Rails 8 architecture reference for developers, covering layer responsibilities, abstraction choices, testing by layer, and a checklist for new features.

Key features

  1. 01Layer responsibilities
  2. 02Guidance on when to abstract
  3. 03Rails 8 pattern guidance
  4. 04Testing plans by layer
  5. 05New-feature checklist

Use cases

  1. 01Plan code layers for a feature
  2. 02Choose where complex logic belongs
  3. 03Design tests for each layer
  4. 04Assess whether to extract a component

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/thibautbaissac/rails_ai_agents --skill rails-architecture

After installing, type/rails-architecturein Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

references/
error-handling.md
layer-interactions.md
query-patterns.md
service-patterns.md
testing-strategy.md

Details

From the project README

Modern Rails 8 Architecture Patterns

Architecture Decision Tree

Where should this code go?
|
+- View/display formatting?       -> Presenter (@presenter-agent)
+- Complex business logic?        -> Service Object (@service-agent)
+- Complex database query?        -> Query Object (@query-agent)
+- Shared behavior across models? -> Concern (/rails-concern skill)
+- Authorization logic?           -> Policy (@policy-agent)
+- Reusable UI with logic?        -> ViewComponent (@viewcomponent-agent)
+- Async/background work?         -> Job (@job-agent, /solid-queue-setup skill)
+- Complex form (multi-model)?    -> Form Object (@form-agent)
+- Transactional email?           -> Mailer (@mailer-agent)
+- Real-time/WebSocket?           -> Channel (/action-cable-patterns skill)
+- Data validation only?          -> Model (@model-agent)
+- HTTP request/response only?    -> Controller (@controller-agent)

Layer Responsibilities

LayerResponsibilityShould NOT contain
ControllerHTTP, params, responseBusiness logic, queries
ModelData, validations, relationsDisplay logic, HTTP
ServiceBusiness logic, orchestrationHTTP, display logic
QueryComplex database queriesBusiness logic
PresenterView formatting, badgesBusiness logic, queries
PolicyAuthorization rulesBusiness logic
ComponentReusable UI encapsulationBusiness logic
JobAsync processingHTTP, display logic
FormComplex form handlingPersistence logic
MailerEmail compositionBusiness logic
ChannelWebSocket communicationBusiness logic

When NOT to Abstract

SituationKeep It SimpleDon't Create
Simple CRUD (< 10 lines)Keep in controllerService object
Used only onceInline the codeAbstraction
Simple query with 1-2 conditionsModel scopeQuery object
Basic text formattingHelper methodPresenter
Single model formform_with model:Form object
Simple partial without logicPartialViewComponent

When TO Abstract

SignalAction
Same code in 3+ placesExtract to concern/service
Controller action > 15 linesExtract to service
Model > 300 linesExtract concerns
Complex conditionalsExtract to policy/service
Query joins 3+ tablesExtract to query object
Form spans multiple modelsExtract to form object

See /extraction-timing skill for detailed extraction guidance.

Core Patterns

Skinny Controllers
# GOOD: Thin controller delegates to service
class OrdersController < ApplicationController
  def create
    result = Orders::CreateService.call(user: current_user, params: order_params)
    if result.success?
      redirect_to result.data, notice: t(".success")
    else
      flash.now[:alert] = result.error
      render :new, status: :unprocessable_entity
    end
  end
end
Result Objects for Services

All services return a consistent Result object:

Result = Data.define(:success, :data, :error) do
  def success? = success
  def failure? = !success
end
Multi-Tenancy by Default
# GOOD: Scoped through account
def index
  @events = current_account.events.recent
end

Rails 8 Specific Features

FeaturePurposeSkill/Agent
Authenticationhas_secure_password generator/authentication-flow
Background JobsSolid Queue (database-backed)/solid-queue-setup, @job-agent
Real-timeAction Cable + Solid Cable/action-cable-patterns
CachingSolid Cache (database-backed)/caching-strategies
AssetsPropshaft + Import Maps(built-in)
DeploymentKamal 2 + Thruster(built-in)

Testing Strategy by Layer

LayerTest TypeFocus
ModelUnitValidations, scopes, methods
ServiceUnitBusiness logic, edge cases
QueryUnitQuery results, tenant isolation
PresenterUnitFormatting, HTML output
ControllerRequestIntegration, HTTP flow
ComponentComponentRendering, variants
PolicyUnitAuthorization rules
SystemE2ECritical user paths

New Feature Checklist

  1. Model - Define data structure (@migration-agent, @model-agent)
  2. Policy - Add authorization rules (@policy-agent)
  3. Service - Create for complex logic (@service-agent)
  4. Query - Add for complex queries (@query-agent)
  5. Controller - Keep it thin (@controller-agent)
  6. Presenter - Format for display (@presenter-agent)
  7. Component - Build reusable UI (@viewcomponent-agent)
  8. Mailer - Add transactional emails (@mailer-agent)
  9. Job - Add background processing (@job-agent)

References

Comments

Markdown supported