我的ApplicationHelper中有一个函数,以及一个用于预渲染的控制器中的精确复制。 Prerendering以我想要的方式创建链接,target =“_ blank”,但现场渲染不会。我的代码如下:
require 'redcarpet'
module ApplicationHelper
def markdown(text)
rndr = Redcarpet::Render::HTML.new(:link_attributes => Hash["target" => "_blank"])
markdown = Redcarpet::Markdown.new(
rndr,
:autolink => true,
:space_after_headers => true
)
return markdown.render(text).html_safe
end
end
在rails控制台中运行此功能也会正常呈现链接,而不会显示链接属性。我的控制器中的相同代码按预期工作。
答案 0 :(得分:1)
我使用自定义降价生成器(redcarpet v 3.1.2)
来实现此功能lib/my_custom_markdown_class.rb
class MyCustomMarkdownClass < Redcarpet::Render::HTML
def initialize(extensions = {})
super extensions.merge(link_attributes: { target: "_blank" })
end
end
然后像这样使用它
app/helpers/application_helper.rb
def helper_method(text)
filter_attributes = {
no_links: true,
no_styles: true,
no_images: true,
filter_html: true
}
markdown = Redcarpet::Markdown.new(MyCustomMarkdownClass, filter_attributes)
markdown.render(text).html_safe
end
或者,您可以将此helper_method放在模型中,并将filter_attributes设置为类变量。