Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I automatically render partials using markdown in Rails 3?

I want to have some of my partials as markdown snippets. What is the easiest way to render them using the standard rails erb templating?

Ideally, I'd like to do something like this:

If I have a partial in app/views/_my_partial.md.erb:

My awesome view ===============  Look, I can **use** <%= language %>! 

which I reference from a view like so:

<%= render "my_partial", :language => "Markdown!" %> 

I want to get output that looks like this:

<h1>My awesome view</h1> <p>Look, I can <strong>use</strong> Markdown!</p> 
like image 251
Jacob Avatar asked Nov 12 '10 10:11

Jacob


1 Answers

Turns out, the Right Way (tm) to do this is using ActionView::Template.register_template_handler:

lib/markdown_handler.rb:

require 'rdiscount'  module MarkdownHandler   def self.erb     @erb ||= ActionView::Template.registered_template_handler(:erb)   end    def self.call(template)     compiled_source = erb.call(template)     "RDiscount.new(begin;#{compiled_source};end).to_html"   end end  ActionView::Template.register_template_handler :md, MarkdownHandler 

If you require 'markdown_handler' in your config/application.rb (or an initializer), then any view or partial can be rendered as Markdown with ERb interpolation using the extension .html.md:

app/views/home/index.html.md:

My awesome view ===============  Look, I can **use** <%= @language %>! 

app/controllers/home_controller.rb:

class HomeController < ApplicationController   def index     @language = "Markdown"   end end 
like image 166
Jacob Avatar answered Oct 06 '22 01:10

Jacob