【问题标题】:ERB isn't interpreting variables correctlyERB 没有正确解释变量
【发布时间】:2019-12-26 12:33:21
【问题描述】:

我在这里要做的是创建一个也允许 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:这个例子是使用 rails 6 创建的。

【问题讨论】:

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


    【解决方案1】:

    我认为你应该安装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) %> 
    

    【讨论】:

      【解决方案2】:

      致任何可以使用此功能的人:

      我无法解决问题中最初提出的问题,但使用 Tilt 的不同方法解决了问题:

      class MarkdownTemplateHandler
        def call(template, source)
          compiled_source = Tilt['erb'].new { source }
          compiled_source = Tilt['md'].new { compiled_source.render }
      
          compiled_source.render.inspect.html_safe
        end
      end
      
      ActionView::Template.register_template_handler(:md, MarkdownTemplateHandler.new)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-26
        • 1970-01-01
        • 2013-10-30
        • 2022-12-03
        • 1970-01-01
        • 2015-02-25
        • 2015-03-31
        相关资源
        最近更新 更多