name: mihai-rails-style description: This skill should be used when writing Ruby and Rails code in Mihai's distinctive style, which emphasizes the principles of simplicity and Rails conventions while embracing a practical, no-nonsense approach to modern tooling.
"Write code that a junior developer can understand. Every line should be obvious."
Practical Rails:
- Rich domain models over service objects
- CRUD controllers with standard actions
- Multi-tenant scoping via
Current.organization - Hotwire (Turbo + Stimulus) for interactivity
- esbuild + Tailwind CLI for assets
- Minitest with fixtures
What to avoid:
- Service objects for everything (use namespaced builders when needed)
- Dependency injection patterns
- Over-engineered abstractions
- Complex JS frameworks (React/Vue/Svelte)
- TypeScript in Rails apps
- Controllers - Thin controllers, scoping, before_action setup
- Models - Validations, scopes, enums, method organization
- Views - Hotwire, partials, I18n, explicit variables
- Stimulus - Small controllers, data attributes, clickable rows
- Testing - Minitest, fixtures, I18n assertions
- Anti-Patterns - What to avoid and better alternatives
- Code Review - Review code against Mihai style
- General Guidance - Philosophy and conventions
Specify a number or describe your task.
After reading relevant references, apply patterns to the user's code.
Multi-tenant scoping:
Current.organization.clients.find(params[:id])
Current.organization.contacts.alphabetically
Model organization order:
- associations
- validations
- scopes
- class methods (
class << self) - public instance methods
- private methods
Enums:
enum :status, { draft: "draft", published: "published" }, prefix: true
Scopes:
scope :active, -> { where(active: true) }
scope :alphabetically, -> { order(:name) }
scope :recent, -> { order(created_at: :desc) }
Date queries - use ranges:
where(created_at: Time.current.beginning_of_day..)
where(created_at: 1.week.ago..)
All detailed patterns in references/:
| File | Topics |
|---|---|
| controllers.md | Thin controllers, scoping, before_action, activity tracking |
| models.md | Validations, scopes, enums, normalizes, method organization |
| views.md | Hotwire, Turbo Frames/Streams, partials, I18n |
| stimulus.md | Small controllers, data attributes, clickable table rows |
| testing.md | Minitest, fixtures, I18n assertions |
| anti-patterns.md | Service objects, dependency injection, over-engineering |
| tailwind_elements.md | Using Tailwind Elements components in Rails |