Rails … é apenas Ruby

DHH mencionou isso várias vezes: “Rails é apenas Ruby.” É verdade e é lindo como funciona.

Recentemente me lembrei disso quando estávamos reescrevendo alguns controladores de dispositivo em nosso aplicativo. Vejamos um exemplo:

class SessionsController < Devise::SessionsController
def new
// do amazing new action stuff specific to your app
end

def create
// sign in to the app. create action fun specific to your app
end
end

// Assumes routes are mapped to these actions

É o seu controlador básico de sessões de planejamento. O que acontece se você precisar fazer uma nova versão deste controlador, mas não quiser duplicar todas as ações válidas (digamos que precisamos de um novo layout, lidar com outros tipos de solicitações e adicionar mais algumas ações)? Acontece que Rails é bastante astuto se você mudar as rotas para apontar para um novo controlador que herda do controlador anterior …

class V2::SessionsController < SessionsController
def promotion_sign_in

end

end

// Assumes new routes are set up

Depois de alterar todas as suas rotas, você ficará surpreso ao saber que o novo e o criar ainda funcionam. Isso se deve à natureza simples da herança. Muito legal!

Parece uma coisa tipo “duh”, mas eu não pensei sobre isso quando trabalho em aplicativos Rails. No entanto, Ruby não vê os controladores do Action Controller como algo especial. Eles são apenas aulas.