在Ruby on Rails中使用Markdown的方法_ruby专题

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索markdown
rails
ruby on rails、ruby on rails 教程、ruby on rails 安装、ruby on rails 指南、ruby on rails是什么,以便于您获取更多的相关知识。

时间: 2024-10-25 13:00:45

在Ruby on Rails中使用Markdown的方法_ruby专题的相关文章

在Ruby on Rails中优化ActiveRecord的方法_ruby专题

 Ruby on Rails 编程常常会将您宠坏.这一不断发展的框架会让您从其他框架的沉闷乏味中解脱出来.您可以用习以为常的几行代码片断表达自己的意图.而且还可以使用 ActiveRecord. 对于我这样的一个老 Java? 程序员而言,ActiveRecord 多少有点生疏.通过 Java 框架,我通常都会在独立的模型和模式之间构建一种映射.像这样的框架就是映射框架.通过 ActiveRecord,我只定义数据库模式:或者用 SQL 或者用称为迁移(migration)的 Ruby 类.将对

Ruby on Rails下的图像处理入门教程_ruby专题

图像可以说是任何应用至关重要的一部分.从社交网络到一个简单的Bug追踪器,图像都扮演着重要的角色.然而管理图像并不是一件容易的事情,需要提前耗费大量的时间精力去计划. 本文演示了如何在Rail中实现这一目标.如何处理你的图像以及在后台创建多个版本?如何通过压缩图像又不损图像质量,以此来提高页面性能?这些且听本文一一道来. 入门 本文教程是运行于Rails 4.2,通过MongoDb数据库和HAML呈现视图.不过本文所展示的片段应该兼容任何Rails版本(尽管有些配置差异). 布置舞台 Image

Ruby on Rails在Ping ++ 平台实现支付_ruby专题

本地数据库创建订单表. 建议包含以下字段,参考官方API( https://pingxx.com/document/api): order_no:required 商户订单号,适配每个渠道对此参数的要求,必须在商户系统内唯一. alipay: 1-64 位, wx: 1-32 位, bfb: 1-20 位, upacp: 8-40 位, yeepay_wap:1-50 位, jdpay_wap:1-30 位, cnp_u:8-20 位, cnp_f:8-20 位, 推荐使用 8-20 位,要求数

举例讲解Ruby中require的使用方法_ruby专题

同一目录下的文件,如/usr/local/ruby/foo.rb与/usr/local/ruby/bar.rb两个文件. 如果直接在foo.rb中   require 'bar' 执行时会报找不到bar.rb错误. 这是因为运行   /home/oldsong$ ruby /usr/local/ruby/foo.rb 时会在ruby安装的lib目录和/home/oldsong/目录下查找bar.rb.而不会去rb文件的目录/usr/local/ruby/下查找. 所以除引用系统rb外,requi

Ruby on Rails网站项目构建简单指南_ruby专题

创建 Rails 项目 创建一个普通的 Rails 项目,可以直接使用以下命令: rails new blog 但在国内因为连接 RubyGems 的速度太慢,而 Rails 默认在构建完项目结构后,会使用 bundle 命令从 RubyGems 下载安装依赖包.最后会因为网络问题而卡死.所以需要使用 --skip-bundle 参数跳过执行 bundle 这一步.然后使用国内的 Gems 镜像源来完成后面依赖包的安装.国内推荐的源是 Ruby China 提供的: https://gems.r

提升Ruby on Rails性能的几个解决方案_ruby专题

简介 Ruby On Rails 框架自它提出之日起就受到广泛关注,在"不要重复自己","约定优于配置"等思想的指导下,Rails 带给 Web 开发者的是极高的开发效率. ActiveRecord 的灵活让你再也不用配置繁琐的 Hibernate 即可实现非常易用的持久化,Github 和 Rubygems 上丰富多样的 Rails 插件是 Rails 开发高效率的又一有力保障.Rails 是一个真正彻底的 MVC(Model-View-Controller) 框

Ruby on Rails框架程序连接MongoDB的教程_ruby专题

前边有介绍mongodb的安装以及ror项目的搭建,现在进行一下整合. 1.创建项目 创建项目时不再使用rails active_record支持 rails new todo -O 2.我们将要使用MongoMapper来驱动MongoDB到Rails 编辑GemFile,增加下面的内容 gem"mongo_mapper" 然后  执行 bundle install 安装gem bundle install 3.添加数据库链接 在config/initializer下面新建一个mon

关于Ruby on Rails视图编写的一些建议_ruby专题

    不要直接从视图调用模型层.     不要在视图构造复杂的格式,把它们输出到视图 helper 的一个方法或是模型.     使用 partial 模版与布局来减少重复的代码.     加入 client side validation 至惯用的 validators. 要做的步骤有:         声明一个由 ClientSideValidations::Middleware::Base 而来的自定 validator        module ClientSideValidatio

关于Ruby on Rails路由配置的一些建议_ruby专题

当你需要加入一个或多个动作至一个 RESTful 资源时(你真的需要吗?),使用 member and collection 路由. # 差 get 'subscriptions/:id/unsubscribe' resources :subscriptions # 好 resources :subscriptions do get 'unsubscribe', on: :member end # 差 get 'photos/search' resources :photos # 好 resou