Install Superview
Letβs install Superview and configure a controller to work with Phlex views for actions.
Install the Superview gem
Run bundle add superview to install it in the Gemfile at the base of your Rails project.
Configuring controllers
Then add the following to the controller where you want to render components.
# ./app/controllers/posts_controller.rb
class PostsController < ApplicationController
include Superview::Actions
# ...
end
Move layout false to a base controller
Reduce one line of code by moving layout false to a PhlexController, or whichever controller makes sense in your controller hierarchy.
# ./app/controllers/posts_controller.rb
class PostsController < ApplicationController
include Superview::Actions
# Do this if you're using Phlex to render the layout.
layout false
# ...
end
How Superview works with Rails view rendering
π Unlock content
Purchase this course to unlock this video, source code, and content.
ββββββ βββ ββ β βββββββββββ βββ ββββββ βββββββ βββ ββββββ βββββββ βββββ βββββ βββββββββββββββββ ββ ββββββ βββ βββββ ββββββ ββ ββββββ βββββ
ββββ ββ βββββ ββββ ββββββ ββββ βββββββββ ββ ββββββββββ βββ βββββββββ ββ βββββ βββ ββββ ββββ βββββ β ββββββ βββββββ
Implicit rendering
ββββ βββ ββββ ββββββββ βββ βββββ βββββββββββ ββββββ βββββββββ ββββ βββββββββββββββββββββββββββββββ βββββββ β ββββββββββββββββββββ ββββββ βββββ βββββββββββ ββ βββ βββββββββββ
βββ βββββ βββββββ ββ βββ βββββββ βββββββββββββββββ βββββββ ββ ββββββ ββ βββββ ββββββ ββ βββ ββββββ ββββββ ββ βββ βββββββββββ ββ ββββ βββ ββββββ ββββ ββ βββββ ββ βββ βββββββββββ βββββββββ βββ β ββββββββ ββββ βββββββββββ ββ βββ ββββββββββ βββ βββββββ
ββββ ββ βββ βββββββββ βββββββββ ββββ ββ ββββ ββ β βββββββββ ββββ ββββββββββββββββββββββ βββ ββ βββββββ
Component rendering
βββββββββ βββββββ βββββββββββββββββ ββ ββββ βββ β βββββββββββββ βββββββββ
β ββββ ββ β ββββββββ βββββ ββββββ ββββββββ βββ ββββββ ββ ββββ βββ ββ βββββββ
β ββ ββ ββββββββ β βββββ βββββ ββ βββ βββββββββββ ββ ββββ ββββββ βββββ ββ ββββ
β βββ βββββ ββ βββββββββ ββββ βββββ ββββββ ββ βββββββββ ββββββ ββββββ
def βββββββββββββββββ(βββββββββββ)
β ββββ βββββββ βββββ βββββ βββ ββ ββββ ββ ββββ ββ ββββ ββ βββββ βββ
β βββββββββ βββββ βββ ββββββ βββ β ββββββββββββββββββββββββ ββββ ββββ β ββββ
β βββββ ββ ββ ββββ βββββ ββ ββββββββ ββ βββ ββββββββββ βββ ββββββββ ββββββββββββββ
β ββ ββ ββββ βββββ ββββββ ββ ββββ ββββ ββββ βββββββββββββββββββββββββββ ββ β ββββββββ
β βββ βββββ ββ βββββ ββββ ββ βββββββ ββββ β βββββββ
if ββββββββββββββ(βββββββββββ)
βββββββββββ
elsif ββββββββββββββββββββββββ βββββββββββ
"default_component_render"
else
super
end
end
Setting values inside components
ββ βββββ ββββββββββ βββββ ββββ ββ βββββββββ βββββ βββββββββ ββββ βββββββββββ ββ ββββββ βββββββ βββββββ ββββββββββ βββββ βββββ ββββ ββββ βββββ ββββββββ ββββ ββββ β βββββββββββ βββββ ββββ ββββ ββββββ βββ βββ ββββ β βββ βββββββ ββ ββ ββββ βββ βββββ βββββββββββ
class PostsController < βββββββββββββββββββββ
β ββββββββ βββββββββ β ββββ ββββ
def ββββ = ββββββ βββββ::ββββ.βββ(post: βββββ)
end
βββββββββ βββββ ββ ββββββ β βββββββ βββββββ βββββ βββββ βββββββββ βββ β βββββββββ βββββββββ ββββ ββββ ββββββ ββββββββ ββββ βββ ββββββββ βββ ββ ββββββ
Variable assignment via attr_writer methods.
βββββββββ βββββββ βββ βββββ βββββββββ ββ βββββββββββ ββ βββ ββββ βββ βββββββββββ βββββββ ββ βββββ βββββ βββββββ βββ ββββββββββββββββ βββββββββββ ββ βββββ βββ ββββ βββββββ βββ βββββββββ ββββββ ββ ββββββββ ββββββ ββββ β ββββ βββββ ββββ βββββ ββββ ββ β βββββββββββ
class PostsController < βββββββββββββββββββββ
β βββ
β ββββββ β ββββ βββββ ββββββββ ββ βββββ
βββββββββββββ do
βββββ = ββββ.ββββ(ββββββ[:id]) if ββββββ.ββββ :id
end
class Show < ββββββββββ::ββββ
β ββββββ βββββ ββ βββ ββββ
attr_accessor :post
def βββββββββββββ(&)
ββ { βββββ.βββββ }
βββ(class: "prose") { βββββ.ββββ }
end
end
end
βββββββββ βββββββ ββ ββββββββ ββ βββββ ββββ βββββ ββ βββ βββββ ββββββββ βββββββββββ ββ β βββββββββββ ββββ ββββββ βββ ββββββ ββ ββββββββββ ββ β ββββββ ββ βββ βββββ ββ ββ βββ βββ βββββ ββββββββ ββ ββββββββ βββββββ ββββ ββββββββββ
β βββββββ βββ ββββββββ βββββββββ ββββ βββ βββ ββ βββ ββββββββββ ββ ββββββ ββββββ
β ββ ββββββ βββ ββββββββ ββ β ββββββββββ βββββββ ββββββ βββ β βββββ βββββ βββ
β ββββββββββββ ββββββββ ββββββββββββββ βββββββ ββ ββββ ββββββββ ββ ββββ ββ βββββββββββββ
β βββ ββ ββββ βββββββ
def ββββββββββββββββββββββββββ(ββββ)
ββββ.βββ do |ββββ|
ββββββββββββ.ββββ do |ββββββββ, βββββ|
ββββββββββββββββ = "#{ββββββββ}="
ββββ.ββββ ββββββββββββββββ, βββββ if ββββ.βββββββββββ ββββββββββββββββ
end
end
end
Changing variable assignment behavior
ββ βββ βββββββ ββββββββ βββ βββββββββ ββββββββ ββββββββββ βββββββ ββββ βββ ββββ ββββ ββββββββ βββ ββββββββββββββββββββββββββ ββββββ ββ ββββ βββββββββββ
class PostsController < βββββββββββββββββββββ
β βββ
def ββββββββββββββββββββββββββ(ββββ)
ββββ.βββββββ = βββββββ
β ββ βββββ ββββββ βββββ
end
end
βββ ββ βββ ββββββ ββ ββββββββ βββ ββββββββββββ
class PostsController < βββββββββββββββββββββ
β βββ
def ββββββββββββββ(ββββ)
ββββββββββββββββββββββββββ ββββ.βββ(βββββββ, βββββββ)
end
end
βββββ ββββ ββββ ββββββββββββ βββ ββββββββ βββ ββ ββββββββ ββ β ββββββββ ββββββββββ ββ ββββ ββββββββ ββββ βββ ββββββββββββββββββββββ