我正在尝试让 Markdown 与 .erb 很好地配合。我想使用 high_Voltage 来渲染用 Redcarpet 解析的 markdown 页面(或带有 markdown 部分的普通 .html.erb 文件),并且正在努力使其全部协同工作。
目前我有一个名为markdown_template_handler.rb
其中包含以下代码:
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 方法是新方法的派生,它只需要 1 个参数,即文本。但是,当我尝试在快速 Rails 控制台会话中使用它时,它还需要两个参数。
当我从上面的代码中删除解析 erb 的要求时,一切都按预期工作,所以我认为这与 Redcarpet 不工作有任何关系。
我正在使用 Rails v6.0.0.rc1 和 Ruby v2.5.3p105
任何帮助表示赞赏。
Edit
进一步的研究使我发现Rails 6.0 ERB ActionView 模板处理程序。该处理程序的调用方法确实需要两个参数:模板和源。也就是说,在Rails 5.2.3,ERB Action View 模板处理程序调用方法只需要一个参数,即模板。
有人可以指出我弄清楚什么的方向吗source是在这种背景下吗?我找不到相关的文档。