ERB无法正确解释变量

问题描述 投票:0回答:1

我在这里试图做的是创建一个也允许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创建的。

ruby-on-rails erb ruby-on-rails-6
1个回答
0
投票

我认为您应该安装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) %> 
© www.soinside.com 2019 - 2024. All rights reserved.