Jac*_*cob 36 markdown partials ruby-on-rails-3
我希望将我的部分内容作为降价片段.使用标准rails erb模板渲染它们的最简单方法是什么?
理想情况下,我想做这样的事情:
如果我在app/views/_my_partial.md.erb中有部分内容:
My awesome view
===============
Look, I can **use** <%= language %>!
Run Code Online (Sandbox Code Playgroud)
我从这样的观点中引用:
<%= render "my_partial", :language => "Markdown!" %>
Run Code Online (Sandbox Code Playgroud)
我想获得如下所示的输出:
<h1>My awesome view</h1>
<p>Look, I can <strong>use</strong> Markdown!</p>
Run Code Online (Sandbox Code Playgroud)
Jac*_*cob 80
事实证明,正确的方法(tm)使用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
Run Code Online (Sandbox Code Playgroud)
如果你require 'markdown_handler'在你的config/application.rb(或初始化),那么任何视图或部分可呈现为降价与使用扩展ERb的插值.html.md:
app/views/home/index.html.md:
My awesome view
===============
Look, I can **use** <%= @language %>!
Run Code Online (Sandbox Code Playgroud)
app/controllers/home_controller.rb:
class HomeController < ApplicationController
def index
@language = "Markdown"
end
end
Run Code Online (Sandbox Code Playgroud)
tjw*_*ace 20
不是纯粹的降价解决方案,但您可以使用HAML过滤器来呈现markdown以及其他标记语言.
例如,在app/views/_my_partial.html.haml:
:markdown
My awesome view
===============
Look, I can **use** #{language}!
Run Code Online (Sandbox Code Playgroud)
我刚刚发布了一个处理视图的markdown-rails gem .html.md.
你不能用Erb链接它 - 它只适用于静态视图和局部视图.要嵌入Ruby代码,你必须使用tjwallace的解决方案:markdown.