rails

📁 maroffo/claude-forge 📅 5 days ago
4
总安装量
4
周安装量
#49877
全站排名
安装命令
npx skills add https://github.com/maroffo/claude-forge --skill rails

Agent 安装分布

opencode 4
gemini-cli 4
claude-code 4
github-copilot 4
codex 4
kimi-cli 4

Skill 文档

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):

Component Purpose Use When
Solid Queue Jobs <100 jobs/sec, no Redis needed
Solid Cache Caching 10TB+ possible
Solid Cable WebSockets No 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