Dois layouts, uma linha que alterna entre eles
Dois arquivos de layout, ambos renderizando páginas neste app
app/views/layouts/application.html.erb e app/views/layouts/admin.html.erb. Toda página pública, como o roadmap, um curso ou uma aula, é envolvida pelo primeiro. Toda página em /admin, como o dashboard ou o editor de cursos, é envolvida pelo segundo: um layout guiado por barra lateral, sem navbar e sem rodapé. (Os emails usam um terceiro par, mailer.html.erb e mailer.text.erb, pelo layout "mailer" do ApplicationMailer, que este curso deixa de lado.) São dois conjuntos diferentes de moldura de página, e este curso é sobre a linha de código que decide qual controller fica com qual.
A única linha, no arquivo deste app
# app/controllers/admin/base_controller.rb
module Admin
class BaseController < ApplicationController
before_action :require_login
before_action :require_admin
helper Admin::PaginationHelper
layout "admin"
end
end
layout "admin": uma palavra, uma string. Todo controller do namespace Admin:: deste app, do Admin::Catalog::CoursesController ao Admin::Enrollment::BadgesController, herda de Admin::BaseController, e nenhum deles repete esta linha. O ApplicationController, a base de que todos os outros controllers herdam, não tem chamada layout nenhuma. Uma declaração, uma fronteira de namespace, dois templates de moldura.
Por que "namespacing" é a palavra certa
A área de admin deste app não é uma aplicação separada. O Admin::Catalog::CoursesController usa o mesmo model Catalog::Course, o mesmo banco e a mesma sessão que o Catalog::CoursesController público que um aluno navega. O que muda na fronteira Admin:: é a apresentação, um layout diferente, mais dois before_actions no mesmo arquivo (require_login, require_admin) que o lado público não tem. Aqui o namespace é mais do que um módulo Ruby para organizar arquivos. É a fronteira onde "quem pode ver isto" e "como isto aparece" mudam juntos.
O que este curso cobre
Sete aulas, cada uma conferida nos dois arquivos de layout deste app e na hierarquia de controllers dele. A aula 2 trata do que o método de classe layout faz e de onde ele é declarado. A aula 3 mostra como o Admin::Catalog::CoursesController, aninhado dois níveis abaixo, o herda sem redeclarar nada, pelo código-fonte instalado do Rails. A aula 4 mostra como o ApplicationController, sem chamada layout, ainda acaba com layouts/application.html.erb por convenção. A aula 5 compara os dois arquivos linha a linha. A aula 6 trata das outras formas do método layout (um Symbol, uma Proc, false) e de quais este app usa, incluindo uma que ele usa num lugar inesperado.
Continue com a aula 2
O método de classe layout, declarado uma vez no Admin::BaseController
Explica o layout como método de classe do ActionView::Layouts que grava configuração e não renderiza nada sozinho.
Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.