rails

Ruby on Rails 8 with service-oriented architecture, Dry-validation, Sidekiq/Solid Queue, Hotwire. Use for Rails API, Rails services, Rails forms, RSpec, ActiveRecord, Rails migrations. Not for standalone Ruby gems (use ruby skill).

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "rails" with this command: npx skills add maroffo/claude-forge/maroffo-claude-forge-rails

ABOUTME: Rails 8 service-oriented architecture, validation contracts, background jobs, Hotwire

ABOUTME: API development with thin controllers, services, forms, filters, and modern Rails stack

Ruby on Rails - Modern Development

Quick Reference

bundle exec lefthook run all    # Quality checks
bundle exec rspec               # Tests
rails s / bin/dev               # Server (bin/dev for Hotwire)
bin/jobs                        # Solid Queue workers

See also: _AST_GREP.md (sg patterns), _PATTERNS.md, source-control

Architecture calls:

MyService.new(user:, params:).call    # Service
MyForm.new(params, user).save         # Form
MyFilter.result(params, scope)        # Filter
MyJob.perform_async(id)               # Sidekiq
MyJob.perform_later(id)               # Solid Queue

Sacred Rules (NON-NEGOTIABLE)

  1. NO LOGIC IN CONTROLLERS - HTTP layer only
  2. ALL LOGIC IN SERVICES/FORMS/FILTERS
  3. NO ACTIVERECORD VALIDATIONS - Dry-validation contracts only
  4. MINIMUM MODEL LOGIC - Data structures + associations
  5. NO MODEL CALLBACKS - Exception: attachment destruction

Ruby 3.4 & Rails 8

YJIT enabled by default (15-30% faster). New it block parameter:

users.map { it.name }  # replaces _1

Solid Trifecta (DB-backed alternatives to Redis):

ComponentPurposeUse When
Solid QueueJobs<100 jobs/sec, no Redis needed
Solid CacheCaching10TB+ possible
Solid CableWebSocketsNo Redis infra

Use Sidekiq when: latency <100ms required, 10k+ jobs/min


Pattern Summary

Service: Complex business logic, multi-step operations, transactions

MyService.new(user:, params:).call  # Returns OpenStruct(success, record)

Form: User input validation + persistence

MyForm.new(params, user).save  # Returns true/false

Contract: Validation rules (Dry-validation)

CreateContract.new.call(params)  # Returns Result(success?, errors)

Controller: HTTP layer only, no business logic

def create
  form = CreateForm.new(params, current_user)
  form.save ? render(json: form.model, status: :created) : render(json: { errors: form.errors }, status: :unprocessable_entity)
end

Model: Associations, enums, simple scopes. NO validations, NO callbacks, NO business logic.

belongs_to :user
has_many :tags, dependent: :destroy
enum :status, { draft: 0, published: 1 }
scope :recent, -> { order(created_at: :desc) }

Quality Checklist

Before commit: bundle exec lefthook run all

  • NO controller logic
  • Validation in contracts only
  • Business logic in services
  • Jobs idempotent
  • Tests pass

Resources

Key gems: Dry-validation, Sidekiq/Solid Queue, Scenic, Pundit, Devise/Rodauth, ViewComponent/Phlex


For detailed patterns and examples, see references/rails-patterns.md

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

newsletter-digest

No summary provided by upstream source.

Repository SourceNeeds Review
General

react-nextjs

No summary provided by upstream source.

Repository SourceNeeds Review
General

email-cleanup

No summary provided by upstream source.

Repository SourceNeeds Review
General

android-kotlin

No summary provided by upstream source.

Repository SourceNeeds Review