rails-patterns
Faz seu agente desenvolver aplicações com Ruby on Rails. Ele aplica padrões recomendados para criar controladores, modelos e visualizações eficientes e fáceis de manter.
O que ela faz
Este guia ensina como organizar seu código em aplicações Ruby on Rails, seguindo as melhores práticas da comunidade. Ele ajuda a manter seu projeto organizado e fácil de entender, mesmo quando ele cresce.
Quando usar
- ✓Ao iniciar um novo projeto Rails.
- ✓Quando um arquivo no seu projeto fica muito grande.
- ✓Ao revisar o código de outra pessoa.
Exemplo do que pedir para a IA
“Como eu organizo o código para criar uma nova fatura?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Ele sugere onde colocar cada tipo de código (como controllers, serviços, modelos) em pastas específicas. Para tarefas complexas, ele recomenda usar objetos de serviço ou formulário em vez de colocar tudo no controller.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add affaan-m/ECC --skill rails-patternsOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/rails-patterns/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Padrões Rails
Padrões de framework para aplicações Ruby on Rails modernas (Rails 7.1+ e 8.x). Rails é opinativo por design; estes são os padrões em que a comunidade convergiu para aplicações que permanecem manteníveis após a marca de 50 modelos. Essa habilidade é o "como". Para o "o quê" e o "quando" (as decisões sobre qual padrão usar), veja as regras de padrões Ruby — rules/ruby/patterns.md neste repositório, instalado como rules/ecc/ruby/patterns.md.
Quando Ativar
- Construindo uma aplicação Rails (full-stack, apenas API ou híbrida)
- Revisando um PR que toca
app/ouconfig/ - Gerando models, controllers, services ou jobs
- Uma ação de controller cresce além de ~10 linhas
- Um arquivo de model cresce além de ~200 linhas
- Consultas ActiveRecord começam a aparecer em controllers ou views
Conceitos Principais
O contrato de diretório
Aplicações Rails seguem uma estrutura previsível. Adicione diretórios deliberadamente, não casualmente.
app/
models/ ActiveRecord models. Persistence and domain logic close to the data.
controllers/ HTTP request handling. Thin orchestration only.
views/ ERB templates. No business logic.
components/ ViewComponent classes. View logic that needs tests.
services/ Service objects. Multi-step business operations.
forms/ Form objects. Complex form handling across multiple models.
queries/ Query objects. Reusable, composable ActiveRecord queries.
jobs/ Background jobs. Async work via Solid Queue, Sidekiq, or GoodJob.
mailers/ ActionMailer classes.
helpers/ View helpers. Tiny presentational logic only.
policies/ Authorization policies (if using Pundit). Optional.
channels/ ActionCable channels for WebSocket work.
Evite app/lib/, app/utils/, app/managers/. Se algo não se encaixa nos diretórios acima, o design geralmente precisa ser repensado, não um novo diretório. Código verdadeiramente genérico vai para lib/.
Controllers "magros" (skinny controllers)
Controllers recebem uma requisição, delegam para o objeto correto e renderizam uma resposta. A lógica de negócio vive em outro lugar. (De acordo com as regras de padrões Ruby, extraia para um objeto de serviço quando o controller começar a carregar múltiplas responsabilidades.)
Objetos de serviço (Service objects)
O padrão para operações de negócio que tocam mais de um save de model. Convenções que os mantêm consistentes:
- Agrupe por domínio (
Invoices::Create), não por sufixo (InvoiceCreator). - Um método de classe
.calldelega para uma instância#call. - Retorne um objeto Result, não um booleano ou um registro puro, para que o chamador possa ramificar em sucesso, erros e o registro afetado.
- Envolva escritas de múltiplos registros em uma transação.
- Mantenha cada serviço com um único propósito (
Invoices::Create,Invoices::MarkPaid), nuncaInvoices::Manager.
Objetos de formulário (Form objects)
Quando um formulário abrange múltiplos modelos ou tem campos que não mapeiam para colunas, use um objeto de formulário em vez de atributos aninhados ou atributos virtuais no modelo errado. Ele se comporta como um model para a view (form_with model: @form) enquanto compõe registros de forma limpa.
Objetos de consulta (Query objects)
Para consultas ActiveRecord reutilizadas em controllers ou services, ou muito complexas para um escopo, extraia um objeto de consulta que aceita um escopo como entrada para que ele se componha. Regra geral: um escopo que cresce além de três condições encadeadas ou começa a aceitar parâmetros deve se tornar um objeto de consulta.
Jobs em background
Descarregue qualquer coisa lenta. (De acordo com as regras de padrões Ruby, Solid Queue para novas aplicações Rails 8 com throughput modesto; Sidekiq quando você precisar de observabilidade madura, alto throughput ou Redis existente.) Independentemente do adaptador: passe IDs em vez de registros, torne perform idempotente e defina retry_on/discard_on explicitamente.
ViewComponent em vez de parciais
Para lógica de visualização com renderização condicional, mais de dois argumentos ou reutilização em mais de três lugares, prefira um ViewComponent. Componentes são testáveis isoladamente e expõem sua interface explicitamente; parciais com lógica condicional profunda se tornam dívida técnica.
Hotwire: Turbo e Stimulus
A pilha frontend padrão do Rails. (De acordo com as regras de padrões Ruby, prefira Hotwire para aplicações renderizadas no servidor; use React/Vue apenas quando a complexidade da interação justificar a superfície do cliente.) Turbo Frames para atualizações parciais de página, Turbo Streams para atualizações controladas pelo servidor, Stimulus para pequenos comportamentos no lado do cliente adjacentes ao markup.
A pilha Solid do Rails 8
…
Perguntas frequentes
O que são 'skinny controllers'?
Significa que os controllers (que lidam com as requisições da web) devem ser curtos e apenas organizar o trabalho, delegando a lógica mais complexa para outras partes do código, como os objetos de serviço.
O que são 'service objects'?
São pedaços de código que realizam uma tarefa específica e bem definida, como criar uma fatura. Eles ajudam a manter os controllers limpos e o código mais organizado.
Por que usar 'ViewComponent' em vez de 'partials'?
ViewComponents são mais fáceis de testar e organizar a lógica de visualização complexa, tornando o código mais robusto e fácil de manter do que os tradicionais 'partials'.
Detalhes
Descrição original do autor
Ruby on Rails framework patterns for Rails 7.1+ and 8.x apps. Covers the directory contract, skinny controllers with service objects, form objects, query objects, idiomatic ActiveRecord, background jobs, ViewComponent, Hotwire, and the Rails 8 Solid stack. Use when building or reviewing Rails apps, controllers, models, services, jobs, or views.
repo: affaan-m/ECC
Popularidade
- Estrelas no GitHub
- 280 mil
- Posição no ranking
- #110
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
api-and-interface-design
Ajuda a criar APIs e interfaces bem definidas. É útil ao projetar como diferentes partes de um software vão se comunicar.
addyosmani/agent-skills
mason
Ajuda seu agente a escrever código limpo e funcional. Ele segue as regras definidas para garantir que tudo funcione como esperado.
sickn33/agentic-awesome-skills
max
Faz seu agente melhorar o código existente sem mudar o que ele faz. Ele deixa o código mais fácil de ler e manter.
sickn33/agentic-awesome-skills