Trailblazer's file structure for Cells.
Switch branches/tags
Clone or download
Latest commit a9cb724 Jun 22, 2018


Trailblazer's file layout for Cells.

View Prefixes

In Trailblazer, class structures such as the following are very common, let's say for a post concept, here are the class headers, and where the view directory gets resolved to.

module Post
  module Cell
    class New < Trailblazer::Cell         # => app/concepts/post/view
    class Show < Trailblazer::Cell        # => app/concepts/post/view
      class SideBar < Trailblazer::Cell   # => app/concepts/post/view

Automatic show

You don't have to define a show method, Trailblazer::Cell will have one that looks as follows.

class Trailblazer::Cell
  def show

View Name

When calling render, the view name is inferred from the class name.

module Post
  module Cell
    class New < Trailblazer::Cell         # => new.erb
    class Show < Trailblazer::Cell        # => show.erb
      class SideBar < Trailblazer::Cell   # => side_bar.erb

You can still override using render view: :name.


You can pass a layout cell into every Trailblazer::Cell which will render the layout., layout: Gemgem::Cell::Layout).()

The :layout option has to refer to a cell class. When invoked, the layout cell will receive the content of the actual cell under :content, resulting in a call as follows.,

The layout cell's show view can sit in any directory, for example gemgem/view/layout.rb.

Yay, I'm the layout!

<%= content %>

It's up to you what you do with the :content option. Here's the Trailblazer way.

class Gemgem::Cell::Layout < Trailblazer::Cell
  self.view_paths = ["gemgem"]
  def content

Cells with layout cells allow replacing a frameworks entire view stack, e.g. ActionView.


It works identical with namespaces.

View Paths

Some projects do not use the app/concept view path. This can be changed as follows.

Trailblazer::Cell.view_paths = ["concepts"]

Note that this will change for all cells, including bundled in gems. Introduce an Application::Cell if you don't like that.


This gem has only one dependency: cells. Note that it does not need trailblazer.