Layouts
In the last video, we ended up with a controller that rendered inline views that looks like this:
class PostsController < ApplicationController
before_action do
@blog = current_user.blog
@posts = @blog.posts
end
class Index < Phlex::HTML
def initialize(posts:)
@posts = posts
end
def template
h1 "Posts"
ul do
@posts.each do |post|
li do
a href: post_path(post), post.title
end
end
end
end
end
def index
render Index.new(posts: @posts)
end
# ...
end
π Unlock content
Pre-order this course to unlock this video, source code, and content. You'll also get to work with Brad to fine tune the course cirriculum.
βββ ββ ββ ββββββ βββββββ ββ ββββββ
Working towards layouts
βββββ βββββββ βββ β βββββββββ βββββββ ββββ β βββββ βββββ βββββ ββ ββββ βββββββ ββββββββββ βββββββ βββ ββ βββ ββββ βββββββ βββ βββ βββββ ββββββββββ ββ βββββββ βββ βββββ
Rendering content around a view
βββ βββββββββββββββ ββββββ ββ ββββ ββ ββββ βββ βββββββ ββ β ββββ ββββ β βββββββ ββ βββββ β βββββ ββββ ββββββββ βββ βββββββ ββ βββ ββββ ββ ββ ββββββββ βββ βββββββ βββ βββββββ ββββββββ
class Index < βββββ::ββββ
def ββββββββββ(βββββ:)
ββββββ = βββββ
end
β βββββ βββ ββββ ββββ β ββββββ
def βββββββββββββββ(&βββββββ)
super do
ββββ(class: "prose", &βββββββ)
end
end
def ββββββββ
ββ "Posts"
ββ do
ββββββ.ββββ do |ββββ|
ββ do
β href: βββββββββ(ββββ), ββββ.βββββ
end
end
end
end
end
ββ ββββ βββ ββββ ββββ ββ ββββ βββ ββββ ββββ βββ ββββ ββ βββ βββββ βββββ ββ ββββ ββββββ β ββββ ββββββ
class View < βββββ::ββββ
β βββββ βββ ββββ ββββ β ββββββ
def βββββββββββββββ(&βββββββ)
super do
ββ { βββββ }
ββββ(class: "prose", &βββββββ)
end
end
end
class Index < ββββ
def ββββββββββ(βββββ:)
ββββββ = βββββ
end
def βββββ = "Posts"
def ββββββββ
ββ do
ββββββ.ββββ do |ββββ|
ββ do
β href: βββββββββ(ββββ), ββββ.βββββ
end
end
end
end
end
βββββ ββββββ ββββββ βββ βββββββ βββ βββββββββ βββ βββ ββββββ βββββ β ββββββββ βββββββ βββ ββ ββββ βββ βββββββ βββββββ ββ βββ βββββ ββββββ ββββββββββ βββ ββββ βββββββ
Extracting the layout into itβs own class
βββββ ββ ββββ β βββββ βββββ ββββ βββ βββββββββββββββ ββββ β ββββββ βββββ βββ ββββ ββββ ββββ ββββ βββ βββββ
β βββββββ βββ ββββ ββββ βββββ βββββββββ βββ βββββ ββββββ ββββ
class Layouts::Base < βββββ::ββββ
def ββββββββββ(βββββ:)
ββββββ = βββββ
end
def βββββββββββββββ
ββββ do
ββββ do
βββββ { ββββββ }
end
ββββ do
yield
end
end
end
end
class Layouts::Post < βββββββ::ββββ
β βββββ βββ ββββ ββββ β ββββββ
def βββββββββββββββ(&βββββββ)
super do
ββ { βββββ }
ββββ(class: "prose", &βββββββ)
end
end
end
βββββ βββββ βββββ ββββ ββ βββββββββββββββββββββββββββ βββ ββββββββββββββββββββββββββββββββββ βββββββββββββ
Using the layout from the view
βββ ββββ βββ ββββββ ββ βββββββββ ββββ βββ βββ ββββββ ββ βββ βββ ββ ββ βββ βββββ
class View < βββββ::ββββ
β βββββ βββ ββββ ββββ β ββββββ
def βββββββββββββββ(&βββββββ)
super do
ββββββ βββββββ::ββββ.βββ(βββββ:)
end
end
end
Disable the Rails layout
βββ ββββ βββββ ββ ββββ ββ ββ ββ βββββββ βββββ ββββ βββββββββ βββ βββ ββββββ ββββ βββ βββββββββββ βββββ βββ βββ βββββ βββββ ββββββββ ββ βββ βββ βββ ββββ ββ βββββ ββββ ββββ ββ βββββ ββ βββ βββ
class PostsController < βββββββββββββββββββββ
ββββββ false
βββββββββββββ do
βββββ = ββββββββββββ.ββββ
ββββββ = βββββ.βββββ
end
class View < βββββ::ββββ
β βββββ βββ ββββ ββββ β ββββββ
def βββββββββββββββ(&βββββββ)
super do
ββββββ βββββββ::ββββ.βββ(βββββ:)
end
end
end
class Index < ββββ
def ββββββββββ(βββββ:)
ββββββ = βββββ
end
def ββββββββ
ββ "Posts"
ββ do
ββββββ.ββββ do |ββββ|
ββ do
β href: βββββββββ(ββββ), ββββ.βββββ
end
end
end
end
end
def βββββ
ββββββ βββββ.βββ(posts: ββββββ)
end
β βββ
end
βββββββ βββββ βββββ β βββ ββ βββββββββββ ββ ββββ ββββ βββββ βββββ ββ ββββ βββββββββ ββ βββ ββββ ββββββ