RailsのモデルでMarkdownを使用する

RailsでWiki的なものを作るために、簡易マークアップ言語にMarkdownを使ってみたので、そのメモ。

Ruby用のMarkdownライブラリはいろいろある模様。今回はredcarpetというのを使った。特にライブラリを比較した上で選択したわけではない。

# Gemfile
gem 'redcarpet'


Redcarpet::Markdownオブジェクトは何度も使いまわせるようなので、初期化時に作成してモデルクラスに保持させた。

# app/models/entry.rb
class Entry < ActiveRecord::Base
  class << self
    attr_accessor :markdown
  end
  @markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML)
end

設定を外部ファイルに出したい場合は初期化用のスクリプトを追加してそこに書く。

# config/initializers/entry.rb
Entry.markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true, :space_after_headers => true)


Markdown形式からHTMLに変換するにはMarkdown形式のデータの文字列をrenderメソッドに渡す。

# app/models/entry.rb
def Entry < ActiveRecord::Base
  def to_html
    markdown.render(self.content)
  end
end