首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Redcarpet中使用ERB

在Redcarpet中使用ERB
EN

Stack Overflow用户
提问于 2019-06-22 11:38:15
回答 2查看 1.3K关注 0票数 6

我试着让Markdown和.erb玩得很好。我想使用high_voltage来呈现使用Redcarpet解析的标记页(或者普通的带有减价部分的.html.erb文件),并且很难让它们一起工作。

目前,我有一个名为markdown_template_handler.rb的初始化程序,它包含以下代码:

代码语言:javascript
复制
class MarkdownTemplateHandler
  def erb
    @erb ||= ActionView::Template.registered_template_handler(:erb)
  end

  def call(template)
    compiled_source = erb.call(template)
    markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML)

    "#{markdown.render(compiled_source.source).inspect}.html_safe;"
  end
end

ActionView::Template.register_template_handler(:md, MarkdownTemplateHandler.new)

然而,它在第7行失败了,compiled_source = erb.call(template)的错误代码写着“错误的参数数(给定1,预期的2)”。

我查看了ERB Ruby文档,但据我所知,call方法是新方法的派生,它只需要一个参数,即文本。但是,当我试图仅在快速rails控制台会话中使用它时,它还需要两个参数。

当我从上面的代码中删除解析erb的要求时,一切都按预期工作,所以我不认为它与Redcarpet不工作有任何关系。

我使用的是Rails v6.0.0.rc1和Rubyv2.5.3p105

任何帮助都是非常感谢的。

编辑

进一步的研究使我找到了Rails 6.0ERB ActionView模板处理程序。这个处理程序的调用方法确实需要两个参数,模板和源。也就是说,在Rails 5.2.3,ERB Action View模板处理程序调用方法中只需要一个参数,即模板。

有人能指点我找出这方面的来源吗?没有我能找到的文件。

EN

回答 2

Stack Overflow用户

发布于 2019-06-25 21:11:43

在这种情况下,当调用处理程序时,call将通过ActionView将源传递给它。

您可以这样重写您的call函数:

代码语言:javascript
复制
def call(template, source)
  compiled_source = erb.call(template, source)
  markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML)

  "#{markdown.render(compiled_source).inspect}.html_safe;"
end

在Rails 6之前,source值是从template.source中提取的,但现在它作为一个单独的参数传递。

票数 7
EN

Stack Overflow用户

发布于 2020-03-14 01:27:30

这种在Rails 6中使用ERB实现标记的方法对我很有用。感谢路易-米歇尔为我指明了正确的方向,包括电话中的两个参数。

代码语言:javascript
复制
require 'redcarpet'

class MarkdownTemplateHandler

  def erb
    @erb ||= ActionView::Template.registered_template_handler(:erb)
  end

  def call(template, source)
    compiled_source = erb.call(template, source)
    "Redcarpet::Markdown.new(Redcarpet::Render::HTML.new).render(begin;#{compiled_source};end).html_safe"
  end

end

ActionView::Template.register_template_handler(:md, MarkdownTemplateHandler.new)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56715152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档