Sobrescrevendo o controlador
Embora o Nerdify implemente toda a lógica padrão de CRUD, filtros, paginação, autorização e montagem dos templates, há situações em que é necessário sobrescrever comportamentos específicos do controlador.
A seguir estão exemplos de como fazer isso da forma mais recomendada: usando super para reaproveitar a lógica padrão e estender/modificar apenas o necessário.
🔁 Sobrescrevendo object
Use quando você quer adicionar comportamentos adicionais no momento de criar ou buscar um objeto (em new, show, edit, etc):
def object
if action_name == "create"
super.tap do |obj|
obj.code ||= SecureRandom.hex(4)
end
else
super
end
end
🔁 Sobrescrevendo objects
Use quando quiser modificar a coleção de dados retornados no index, como adicionar joins, filtros especiais ou escopos:
def objects
super.includes(:category).where(active: true)
end
🧠 Sobrescrevendo criteria
Permite modificar os filtros aplicados via params[:filters] antes de gerar a query:
def criteria
super.merge(status: 'approved')
end
O
criteriasempre deve retornar um hash com os filtros a serem aplicados.
✅ Sobrescrevendo object_parameters
Use quando precisar modificar ou acrescentar parâmetros permitidos (strong params):
def object_parameters
params.require(:invoice).permit(:name, :total, :due_date)
end
Esse método deve sempre retornar um objeto compatível com os métodos de criação e atualização do Rails (
.new,.update,.update_attributes).
🧾 Sobrescrevendo page_json
Quando quiser incluir mais dados na resposta da página:
def page_json
super.merge(extra_info: { current_time: Time.current })
end
Ideal para incluir metadados ou configurações específicas para o frontend.
🔄 Sobrescrevendo actions do CRUD
Você pode sobrescrever qualquer action (create, update, destroy, etc) normalmente:
def create
authorize! :create, model
if object.save
after_create_hook(object)
render json: { redirect_to: router_path(object) }
else
render json: { errors: object.errors }, status: :unprocessable_entity
end
end
🧬 Boas práticas
- Sempre que possível, chame
supere apenas complemente ou altere a resposta. - Utilize os métodos
objecteobjectsem vez de chamarModel.finddiretamente. - Utilize
page_jsonpara enriquecer a resposta da página sem alterar o comportamento padrão. - Prefira sobrescrever os métodos auxiliares (
object,objects,criteria,page_json, etc.) em vez das actions diretamente. - Ao sobrescrever actions diretamente, não esqueça de chamar
authorize!com o modelo e a ação correspondente, para manter a consistência com o sistema de permissões do Nerdify.
Essas abordagens permitem estender a funcionalidade do Nerdify mantendo a base automatizada e reutilizável intacta. Em geral, quanto menos código no controlador, melhor — se precisar escrever demais, provavelmente a lógica pode ser modelada de outra forma ou o template precisa ser reorganizado.