我在这里试图做的是创建一个也允许erb的markdown模板。我提供了此解决方案:
class MarkdownTemplateHandler
def call(template, source)
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML)
compiled_source = erb.call(template, source)
markdown.render(compiled_source).inspect.html_safe
end
private
def erb
@erb ||= ActionView::Template.registered_template_handler(:erb)
end
end
ActionView::Template.register_template_handler(:md, MarkdownTemplateHandler.new)
问题:如果source
包含<%= "Hello" %>
之类的内容,则compiled_source
中的结果为'.freeze; "hello" @outputbuffer.safeappend='
,而不是简单的Hello
。我想念什么吗?
PS:此示例是使用导轨6创建的。
我认为您应该安装coderay gem才能了解源代码,这里是the link for coderay gem,
要安装您可以键入
gem install coderay
这是将其与Redcarpet Gem结合使用的示例代码,您可以将以下代码放在application_helper.rb中
class CodeRayify < Redcarpet::Render::HTML
def block_code(code, language)
CodeRay.scan(code, language).div
end
end
def markdown(text)
coderayified = CodeRayify.new(filter_html: true,
hard_wrap: true)
options = {
fenced_code_blocks: true,
no_intra_emphasis: true,
autolink: true,
lax_html_blocks: true,
}
markdown_to_html = Redcarpet::Markdown.new(coderayified, options)
markdown_to_html.render(text).html_safe
end
然后您可以称之为
<%= markdown(your_markdown_text_variable_here) %>