gpt4 book ai didi

ruby-on-rails - 在 Markdown 中使用 ERB 和 Redcarpet

转载 作者:行者123 更新时间:2023-12-04 06:09:52 26 4
gpt4 key购买 nike

我试图让 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 documentation但据我所知,call 方法是新方法的派生,它只需要 1 个参数,即文本。但是,当我尝试仅在快速 rails 控制台 session 中使用它时,它还需要两个参数。

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

我正在使用 Rails v6.0.0.rc1 & Ruby v2.5.3p105

任何帮助表示赞赏。

编辑

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

有人可以指出我在这种情况下找出什么来源的方向吗?没有我可以找到的文档。

最佳答案

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

你会重写你的 call像这样的功能:

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 中提取的,但它现在作为一个单独的参数传递。

关于ruby-on-rails - 在 Markdown 中使用 ERB 和 Redcarpet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56715152/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com