Need help with panoramic?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

149 Stars 51 Forks MIT License 61 Commits 3 Opened issues


store rails views on database instead of filesystem

Services available


Need anything else?

Contributors list

Panoramic Build Status

An ActionView::Resolver implementation to store rails views (layouts, templates and partials) on database. Simply put: what you can do with views on filesystem, can be done on database.

NOTE: at the moment, only ActiveRecord is supported, I've planned to add more ORMs (see Todo). If you can't wait, adding other ORMs should be very trivial.


Add the following line to Gemfile:

gem "panoramic"


Mandatory fields

Your model should have the following fields:

  • body (text): the source of template
  • path (string): where to find template (ex: layouts/application, you_controller/action, etc...)
  • locale (string): it depends from available locales in your app
  • handler (string): as locale field, it depends from avaiable handlers (erb, haml, etc...)
  • partial (boolean): determines if it's a partial or not (false by default)
  • format (string): A valid mimetype from Mime::SET.symbols

they're what the rails' Resolver API needs to lookup templates.


A simple macro in model will activate your new Resolver. You can use a dedicated model to manage all the views in your app, or just for specific needs (ex: you want a custom template for some static pages, the other views will be fetched from filesystem).

class TemplateStorage < ActiveRecord::Base


To add Panoramic::Resolver in controller, depending on your needs, you may choose:

  • prependviewpath: search for templates first in your resolver, then on filesystem
  • appendviewpath: search for templates first on filesystem, then in your resolver

NOTE: the above methods are both class and instance methods.

class SomeController < ApplicationController
  prepend_view_path TemplateStorage.resolver

def index # as you may already know, rails will serve 'some/index' template by default, but it doesn't care where it is stored. end

def show # explicit render render :template => 'custom_template' end

def custom_template # use another model to fetch templates prepend_view_path AnotherModel.resolver end end

And let's say you want to use database template resolving in all your controllers, but want to use panoramic only for certain paths (prefixed with X) you can use

class ApplicationController < ActionController::Base
  prepend_view_path TemplateStorage.resolver(:only => 'use_this_prefix_only')

This helps reducing the number of database requests, if Rails for example tries to look for layouts per controller.


class MyEmail < ActionMailer::Base
  prepend_view_path TemplateStorage.resolver


Need more help? Check out

, you'll find a dummy rails app I used to make tests ;-)


Enter Panoramic gem path, run

bundle install
to install development and test dependencies, then
rake spec


Long term

  • add generators


Fork, make your changes, then send a pull request.


The main idea was heavily inspired from José Valim's awesome book Crafting Rails Applications. It helped me to better understand some Rails internals.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.