class PagesController < ApplicationController class PageNotFound < Exception; end layout :choose_layout rescue_from ActionView::MissingTemplate, :with => :render_404 rescue_from PageNotFound, :with => :render_404 def show @page = StaticPage.find(params[:page]) if @page respond_to do |format| format.atom { render_atom_feed(@page) } format.all { render_page(@page) } end else raise PageNotFound.new end end protected def choose_layout if @page && @page.props.layout @page.props.layout else 'application' end end def render_atom_feed(root) if root @pages = root.all_children.order_by(:posted_at, :direction => :desc).limit(PAGINATION_SIZE) if @pages.any? render :file => 'layouts/blog/feed', :layout => false, :content_type => 'application/atom+xml' else render_404 end end end end