Static pages with High Voltage

Dealing with static pages in Rails will almost always result in creating a special controller with empty actions that just render out some template. This task is so common that it is perfect to extract it out into a Rails engine.

ThoughtBot, the company behind the paperclip gem has done just that. high_voltage is a gem that handles the routes for you and provides nice helper methods.

Installation

Installation of the gem is straight forward. Add the gem to your Gemfile and run the bundle command to install the gem.

gem 'high_voltage'
bundle install

Usage

The High Voltage gem expects all static files to reside in a pages directory under app/views. We will start off by creating this directory and a file to represend the about page of our rails application.

mkdir app/views/pages
touch app/views/pages/about.html.haml
%h2 About Us
%p This is a awesome Rails application!
.html.haml

High Voltage will now provide URL helpers that you can use throughout your application. We can add an "About Us" link to the applications layout by using the page_path helper method and passing it the name of the of the page.

...
%nav
  %ul
    %li= link_to 'About Us', page_path('about')
...
.html.haml

Override behaviour

Sometimes serving static pages is not enough. You might want to add authentication to the static page or need to render a different layout. High Voltage allows you to extend its PageController.

rails generate controller pages

You will have to add the controller to your routes:

resources :pages
/routes.rb

Now by default every controller in Rails extends the ApplicationController, in order to still use High Voltage we need to change this to HighVoltage::PagesController. We can then start adding some custom behaviour to the controller like adding authentication (e.g. via devise).

class PagesController < HighVoltage::PagesController
    before_filter :authenticate_user!
end
/controller/pages_controller.rb

I hope you found this article useful.

Links

HighVoltage at Github

Comments


Avatar
Fabian Müller – about 2 years ago

Awesome!

Avatar
jx47 – about 2 years ago

Nice article though. May I add your blog to my blogroll?

Avatar
Daniel Calderón – 11 months ago

Thanks so much, just what I need :)

First sign in through Github or Twitter