A5下载站:努力做内容最丰富最安全的下载站! 网站地图最新更新下载排行专题软件发布

热门软件

地铁跑酷

冒险迷岛

全民迷宫

连连消大作战

小河狸创客

阿里健康医鹿

支付宝app

番薯小说

MOMO陌陌

虾米音乐app

位置导航:A5下载 > 源码技巧 > 父类数据

在Ruby on Rails中使用Markdown的方法

时间:2015-08-03 09:05来源:a5源码作者:zhao浏览:59
这篇文章主要介绍了在Ruby on Rails中使用Markdown的方法,不过依赖于pygments.rb这个工具,事先得安装Python,需要的朋友可以参考下……

实现 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,码字效率大大提高。