Ciclo de vida
No Nerdify, o ciclo de vida de uma requisição começa como em qualquer aplicação Rails. Vamos focar no que o Nerdify automatiza: a rota é definida, a requisição chega ao servidor, o roteador do Rails identifica o controlador e a action e redireciona para o método correspondente. No entanto, ao utilizar controladores que herdam das classes base do Nerdify, esse fluxo é altamente otimizado e automatizado.
🔁 Mapeamento da rota para o controlador
Quando a requisição chega — por exemplo, GET /api/v1/customers/new — o roteamento do Rails direciona para Api::V1::CustomersController#new. Da mesma forma, GET /api/v1/customers/123 vai para #show, e assim por diante, seguindo o padrão RESTful.
No entanto, ao herdar de um dos controladores do Nerdify (Nerdify::ApplicationController, Nerdify::SessionsController, ou Nerdify::ReportsController), você ganha uma série de comportamentos automáticos e configuráveis, e normalmente não precisa implementar nada manualmente além da definição do template e das regras de autenticação/autorização.
🧩 Carregamento de modelos e relacionamentos
O Nerdify é capaz de identificar automaticamente os modelos envolvidos na requisição com base na estrutura da URL e da hierarquia do controlador. Por exemplo:
GET /api/v1/companies/4/customers/7
Essa rota instanciará automaticamente:
@company = Company.find(4)
@customer = Customer.find(7)
Isso é possível porque o Nerdify usa convenções baseadas na estrutura do caminho e no nome do controlador para:
- identificar os modelos principais (com
modelesymbol) - no exemplo acima, o nerdify reconheceria e retornaria no model
Customerpara instancia os objetos, e no simbol:customerpara puxar dados e parametros da requisição. - instanciar os parents com
set_parentsisso faz a lógica capturar tambem e instanciar o objeto do pai em@company.
🧪 Ações RESTful automatizadas
As actions padrão do REST (index, show, new, edit, create, update, destroy) já vêm implementadas. Essas ações utilizam métodos auxiliares internos como:
object→ instância do modelo parashow,edit,update,destroy, etc.objects→ coleção paginada e filtrada paraindexobject_parameters→ parâmetros fortes (strong parameters) protegendo atributos, por padrão considera apenas o campos que estão dentro de fieldsets do modelo e protege os campos definidos fora de fieldsets.criteria→ sanitização e montagem do hash de filtrosdefault_scope→ escopo padrão usado ao buscar dadospage_json→ estrutura de resposta completa com layout, componentes, traduções e dados
🧬 Exemplo de fluxo interno:
Para uma action create, o Nerdify executa:
@object = model.new(object_parameters)
if @object.save
# sucesso: renderiza page_json com status 200 e componentes com indicação da aproxima ação no frontend
else
# erro: renderiza erros e mensagem com status 422 e componentes com indicação da aproxima ação no frontend
end
Para index, o fluxo chama:
@objects = objects # inclui filtros, ordenação, paginação, passando pelo criteria, default scope, entre outros helpers.
render json: page_json
⚙️ O método
objectsaplica os filtros definidos emcriteriaque busca isso deparams[:filters]e trata antes da consulta, paginação viaparams[:page], e ordenação comparams[:sort]eparams[:sort_type]. Também trata escopos de ordenação padrão porparams[:filters][:order]e qual lista deve ser renderizada em uma página com várias através do parametroparams[:list_type].
🧾 Renderização da resposta
O método page_json é o responsável por montar a estrutura da resposta final. Ele:
- Carrega os componentes do template definido para aquele controlador
- Injeta os resources instanciados na action
- Adiciona traduções e metadados da página e layout em options
Você pode sobrescrevê-lo para alterar o comportamento, mas recomendamos sempre usar super para preservar a estrutura padrão e aplicar modificações incrementais:
def page_json
super.merge(custom_component: { name: "Extra" })
end
🧨 Quando sobrescrever
Você pode sobrescrever as actions padrão (index, show, etc.) ou qualquer um dos métodos auxiliares (object, objects, criteria, default_scope, etc.). Porém:
⚠️ Se você estiver sobrescrevendo muitas ações, é possível que esteja fugindo da convenção e adicionando complexidade desnecessária. Reavalie a estrutura. O Nerdify foi projetado para funcionar sem escrever nada no controlador além do que é gerado pela CLI, ou seja, os metodos template e authentication.
📦 Convenção sobre configuração
As actions RESTful funcionam automaticamente porque o Nerdify:
- Entende a rota
- Identifica o modelo (via
modelesymbol) - Identifica os pais da rota (via
set_parents) - Executa o método adequado (
object,objects,object_parameters) - Renderiza a resposta com
page_json
Ao seguir as convenções do Nerdify, o comportamento padrão cobre 99% dos casos. O que não for coberto pode ser personalizado com sobrescrita pontual e estruturada.
🧠 A lógica dos controladores do Nerdify é altamente otimizada para produtividade. Você pode confiar no fluxo padrão, sabendo que ele cobre desde autenticação até a entrega da resposta renderizada — com organização, segurança e escalabilidade.