Never write a render_foo method again

Posted by Ian Smith-Heisters Thu, 08 Jan 2009 14:35:00 GMT

I’ve probably written a hundred render_not_found methods in my life as a Rails dev. Usually they just render a static file under /public, and maybe, if I’m feeling nice, give an XML response. No more!

class ApplicationController < ActionController::Base
  protected

  ActionController::StatusCodes::SYMBOL_TO_STATUS_CODE.each do |symbol, code|
    define_method "render_#{symbol}" do |*args|
      respond_to do |format|
        format.html{render_error_html_file(code, (args.first || {}))}
        format.all{head symbol}
      end
    end
  end

  def render_error_html_file code, options={}
    render options.reverse_merge(
      :file => File.join(RAILS_ROOT, 'public', "#{code}.html"),
      :layout => false,
      :status => code
    )
  end

This will give you every render_* method you’ve ever wanted, including the ever-useful render_im_used

Comments

Leave a comment

Comments