Phlex Kits in Erb

Write less code to render Phlex components from Erb templates

Did you know that Phlex Kits work with ERB templates? Assuming you have the latest Phlex Rails gem installed, add this to your controller file to expose components to your ERB view context.

class ApplicationController < ActionController::Base
  helper Components

  # ...
end

This registers the components from the Components namespace as methods in your view helpers so you can call them directly from your templates without all the “rendering ceremony”, like this:

<%= FloatingLayout do |layout| %>
  <% layout.menu do %>
    <nav class="breadcrumbs text-sm">
      <ul>
        <li><%= layout.logo %></li>
      </ul>
    </nav>
  <% end %>
  <% # ... %>
<% end %>

The old way

Prior to Phlex Kits, components would be called via the render method in the Components namespace.

For example, this layout component I’m working on for this website:

class Components::FloatingLayout < Components::Base
  include Phlex::Rails::Helpers::AssetPath

  def view_template
    yield
  end

  def menu_container(*, class: nil, **)
    div(*, class: ["py-32 px-8", grab(class:)], **) do
      yield
    end
  end

  def menu
    header(class: "fixed top-4 left-4 rounded-full z-50 bg-base-200/50 dark:bg-base-100/50 backdrop-blur-2xl shadow py-4 px-8") do
      yield
    end
  end

  def logo
    a(href: "/", class: "flex flex-row items-center gap-2") do
      img(src: asset_path("logo.png"), class: "size-4")
      div(class: "font-bold") { "Beautiful Ruby" }
    end
  end
end

Would have been rendered like this from ERB without kits:

<%= render Components::FloatingLayout.new do |layout| %>
  <% layout.menu do %>
    <nav class="breadcrumbs text-sm">
      <ul>
        <li><%= layout.logo %></li>
      </ul>
    </nav>
  <% end %>
  <% # ... %>
<% end %>

It might not seem like a big deal, but less typing & code without losing meaning is one of many examples of the attention to detail and care that Joel Drapper puts into his work on Phlex.

Do you want to learn Phlex 💪 and enjoy these code examples?

Support Beautiful Ruby by pre-ordering the Phlex on Rails video course.

Order the Phlex on Rails video course for $379 $289