rails-dev-best-practices
SKILL.md
Community Ruby on Rails Development Best Practices
Comprehensive performance and maintainability optimization guide for Ruby on Rails applications, maintained by Community. Contains 45 rules across 8 categories, prioritized by impact to guide automated refactoring and code generation.
When to Apply
Reference these guidelines when:
- Writing new Rails controllers, models, or views
- Optimizing ActiveRecord queries and database access patterns
- Implementing caching strategies (fragment, Russian doll, low-level)
- Building or refactoring API endpoints
- Adding Turbo Frames and Streams for interactive UIs
- Reviewing code for N+1 queries and security vulnerabilities
- Designing background jobs with Sidekiq or Active Job
- Writing or reviewing database migrations
Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Database & ActiveRecord | CRITICAL | db- |
| 2 | Controllers & Routing | CRITICAL | ctrl- |
| 3 | Security | HIGH | sec- |
| 4 | Models & Business Logic | HIGH | model- |
| 5 | Caching & Performance | HIGH | cache- |
| 6 | Views & Frontend | MEDIUM-HIGH | view- |
| 7 | API Design | MEDIUM | api- |
| 8 | Background Jobs & Async | LOW-MEDIUM | job- |
Quick Reference
1. Database & ActiveRecord (CRITICAL)
db-eager-load-associations- Eager load associations to eliminate N+1 queriesdb-add-database-indexes- Add database indexes on queried columnsdb-select-specific-columns- Select only needed columnsdb-batch-processing- Use find_each for large dataset iterationdb-avoid-queries-in-loops- Avoid database queries inside loopsdb-use-scopes- Define reusable query scopes on modelsdb-safe-migrations- Write reversible zero-downtime migrationsdb-exists-over-count- Use exists? instead of count for existence checks
2. Controllers & Routing (CRITICAL)
ctrl-thin-controllers- Keep controllers thin by delegating to models and servicesctrl-strong-params- Always use strong parameters for mass assignmentctrl-restful-routes- Follow RESTful routing conventionsctrl-before-action-scoping- Scope before_action callbacks with only/exceptctrl-respond-to-format- Use respond_to for multi-format responsesctrl-rescue-from- Handle errors with rescue_from in controllers
3. Security (HIGH)
sec-parameterized-queries- Never interpolate user input in SQLsec-strong-params-whitelist- Whitelist permitted params, never blacklistsec-authenticate-before-authorize- Authenticate before authorize on every requestsec-csrf-protection- Enable CSRF protection for all form submissionssec-scope-queries-to-user- Scope queries to current user for authorization
4. Models & Business Logic (HIGH)
model-validate-at-model-level- Validate data at the model levelmodel-avoid-callback-side-effects- Avoid side effects in model callbacksmodel-use-service-objects- Extract complex logic into service objectsmodel-scope-over-class-methods- Use scopes instead of class methods for query compositionmodel-use-enums- Use enums for finite state fieldsmodel-concerns-for-shared-behavior- Use concerns for shared model behaviormodel-query-objects- Extract complex queries into query objects
5. Caching & Performance (HIGH)
cache-fragment-caching- Use fragment caching for expensive view partialscache-russian-doll- Use Russian doll caching for nested collectionscache-low-level- Use Rails.cache.fetch for computed datacache-counter-cache- Use counter caches for association countscache-conditional-get- Use conditional GET with stale? for HTTP caching
6. Views & Frontend (MEDIUM-HIGH)
view-collection-rendering- Use collection rendering instead of loop partialsview-turbo-frames- Use Turbo Frames for partial page updatesview-turbo-streams- Use Turbo Streams for real-time page mutationsview-form-with- Use form_with instead of form_tag or form_forview-avoid-logic-in-views- Move display logic to helpers or presenters
7. API Design (MEDIUM)
api-serializers- Use serializers for consistent JSON responsesapi-pagination- Always paginate collection endpointsapi-versioning- Version APIs from day oneapi-error-responses- Return structured error responsesapi-avoid-jbuilder-hot-paths- Avoid Jbuilder on high-traffic endpoints
8. Background Jobs & Async (LOW-MEDIUM)
job-idempotent-design- Design jobs to be idempotentjob-small-payloads- Pass IDs to jobs, not serialized objectsjob-error-handling- Configure retry and error handling for jobsjob-unique-jobs- Prevent duplicate job enqueuing
How to Use
Read individual reference files for detailed explanations and code examples:
- Section definitions - Category structure and impact levels
- Rule template - Template for adding new rules
Reference Files
| File | Description |
|---|---|
| references/_sections.md | Category definitions and ordering |
| assets/templates/_template.md | Template for new rules |
| metadata.json | Version and reference information |
Weekly Installs
1
Repository
pproenca/dot-skillsGitHub Stars
70
First Seen
Feb 11, 2026
Security Audits
Installed on
amp1
opencode1
kimi-cli1
codex1
github-copilot1
claude-code1