One of my Rails apps recently took responsibility for serving the home page and marketing pages from an installation of Wordpress, mainly to allow for a site-wide nav bar which shows login status. Doing this in Rails is not rocket science, but after experimenting with a few different approaches this is the approach I think works best, along with an improvement to the status quo.

The idea is to put all the static pages in a PagesController which has a single action and corresponding view for each static page. So your homepage would have an index action and a corresponding index.html.erb view file. And your About Us page might be an about action with an about.html.erb view. And so on. Here's what it all looks like.

In your config/routes.rb:

App::Application.routes.draw do
  root to: "pages#index"
  get :contact, to: "pages#contact"
  get :about, to: "pages#contact"
end

In your app/controllers/pages_controller.rb:

class PagesController < ApplicationController
  def index
  end

  def contact
  end

  def about
  end
end

And then you just have a single view to match each action in app/views/pages/.

This is all fine and straightforward, but those route declarations really bothered me. They strike me as very repetitious, especially as you add more and more static pages, so I went digging through the Rails documentation and came across the controller route macro. It essentially scopes a bunch of routes to a specific controller. In other words, exactly what I was looking for.

Now your routes look like this:

App::Application.routes.draw do
  controller :pages do
    root to: :index
    get :contact
    get :about
  end
end

This solution is two lines longer, yet so much more concise. It nicely groups together a set of routes that are related to each other. I think the Rails route scoping documentation is worth a read if you find yourself repetitively adding the same controller value to a bunch of different routes.