我正在尝试在Rails 7.1.1应用程序中添加Markdown支持。
红地毯宝石版本是3.6.0。
我遵循这个问题的建议:
Using ERB in Markdown with Redcarpet
我的当前代码(在/config/initializers/markdown_handler.rb
中)是:
module MarkdownHandler
def self.erb
@erb ||= ActionView::Template.registered_template_handler(:erb)
end
def self.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, MarkdownHandler
字符串
我得到一个错误:ActionView::Template::Error: wrong argument type ActionView::OutputBuffer (expected String)
个
有人能解释一下为什么会发生这种情况,以及如何修复它吗?
1条答案
按热度按时间abithluo1#
自定义模板处理程序使用来自
ActionView::Template::Handlers::ERB
的编译输出。输出是String,但从Rails 7.1开始,它是
ActionView::OutputBuffer
(https://github.com/rails/rails/commit/ee68644c284aa7512d06b4b5514b1236c1b63f55)。提交消息描述了进行此更改的原因:
随着OutputBuffer最近的变化,如果缓冲区后来被连接到,调用
to_s
将非常昂贵(如果缓冲区从未更改,它应该相对便宜,因为Ruby将共享内存)。我们看到一个错误:
ActionView::Template::Error: wrong argument type ActionView::OutputBuffer (expected String)
个要修复它,我们可以简单地转换为String:
字符串