ERB没有正确解释变量

时间:2019-12-26 12:33:21

标签: ruby-on-rails erb ruby-on-rails-6

我在这里要做的是创建一个Markdown模板,该模板也允许erb。我提供了这种解决方案:

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创建的。

2 个答案:

答案 0 :(得分: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) %> 

答案 1 :(得分:0)

对任何可以利用此功能的人:

我无法解决问题中最初提到的问题,但是使用Tilt的另一种方法解决了问题:

# Add Chrome to PATH
chromePATH = r'C:\Program Files (x86)\Google\Chrome\Application'
os.sys.path.append(chromePATH)

# Open chrome browser
os.system('chrome.exe -remote-debugging-port=9014 --user-data-dir="{}"'.format(profilePath))