45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:Ruby on Rails中如何使用Markdown?

Ruby on Rails中如何使用Markdown?

2015-08-21 16:44:34 来源:www.45fan.com 【

Ruby on Rails中如何使用Markdown?

实现 Markdown 语法和代码语法高亮分别是用的 Redcarpet 和 pygments.rb 两个 Gem:

https://github.com/vmg/redcarpet
https://github.com/tmm1/pygments.rb
https://github.com/richleland/pygments-css
http://pygments.org/docs/lexers/

在/Gemfile中添加如下两行:

gem 'redcarpet'
gem 'pygments.rb'

需要说明的是,pygments.rb 依赖于 Python,所以确保机器已经安装了 Python 2.x。

然后在/app/controllers/comments_controller.rb中添加相应 redcarpet 和 pygments.rb 的代码:

class ApplicationController < ActionController::Base
 # Prevent CSRF attacks by raising an exception.
 # For APIs, you may want to use :null_session instead.
 protect_from_forgery with: :exception

 helper_method [:markdown]

 # Highlight code with Pygments
 class HTMLwithPygments < Redcarpet::Render::HTML
 def block_code(code, language)
  language = "text" if language.blank?
  sha = Digest::SHA1.hexdigest(code)
  Rails.cache.fetch ["code", language, sha].join("-") do
  Pygments.highlight(code, :lexer => language)
  end
 end
 end

 protected

 # Markdown with Redcarpet
 def markdown(text)
 renderer = HTMLwithPygments.new({
  :filter_html => true,
  :hard_wrap => true,
  :link_attributes => {:rel => 'external nofollow'}
 })

 options = {
  :autolink => true,
  :no_intra_emphasis => true,
  :fenced_code_blocks => true,
  :lax_html_blocks => true,
  :strikethrough => true,
  :superscript => true,
  :tables => true
 }

 Redcarpet::Markdown.new(renderer, options).render(text).html_safe
 end
end

最后在 View 中就可以直接调用 markdown 方法来处理博客正文了:

<%= markdown @post.content %>

语法规则类似 Github 上的 Markdown,码字效率大大提高。


本文地址:http://www.45fan.com/a/question/18454.html
Tags: Markdown ruby Rails
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部