我希望用户在文本区域中输入 Markdown 文本,当他们发布它时,我会显示相应的 html。我读到 Rails 曾经有一个markdown
方法或类似的方法,您可以在 ERB 文件中的该字段上调用它:
<%= markdown(@post.content) %>
显然,Rails 取消了该功能。再次获得该功能的最佳方法是什么?这似乎解决了我的需求。
我希望用户在文本区域中输入 Markdown 文本,当他们发布它时,我会显示相应的 html。我读到 Rails 曾经有一个markdown
方法或类似的方法,您可以在 ERB 文件中的该字段上调用它:
<%= markdown(@post.content) %>
显然,Rails 取消了该功能。再次获得该功能的最佳方法是什么?这似乎解决了我的需求。
我会使用Redcarpet进行 markdown-html 转换。此外,我会将转换从视图移动到其他对象。您可以使用回调(before_save
)或使用观察者。
从文档:
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML,
:autolink => true, :space_after_headers => true)
markdown.render("This is *bongos*, indeed.")
#=> "<p>This is <em>bongos</em>, indeed</p>"
您可能希望将结果存储在另一列中,例如@post.content_parsed
以便用户可以稍后对帖子进行编辑,而且这样您就不需要对每个请求进行转换。
这是我的解决方案
gem "redcarpet"
module MarkdownRenderer
def self.markdown
@@markdown ||=
Redcarpet::Markdown.new(
Redcarpet::Render::HTML.new(
escape_html: true,
hard_wrap: true,
safe_links_only: true,
with_toc_data: true
),
autolink: true,
fenced_code_blocks: true,
no_intra_emphasis: true,
space_after_headers: true,
tables: true
)
end
def self.render(text)
markdown.render(text)
end
end
def markdown(text)
MarkdownRenderer.render(text).html_safe
end
<%= markdown(@post.content) %>