12

我希望用户在文本区域中输入 Markdown 文本,当他们发布它时,我会显示相应的 html。我读到 Rails 曾经有一个markdown方法或类似的方法,您可以在 ERB 文件中的该字段上调用它:

<%= markdown(@post.content) %>

显然,Rails 取消了该功能。再次获得该功能的最佳方法是什么?这似乎解决了我的需求。

4

3 回答 3

18

我会使用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以便用户可以稍后对帖子进行编辑,而且这样您就不需要对每个请求进行转换。

于 2012-12-22T19:39:47.077 回答
1

提供的解决方案已变成宝石emd你可以在这里阅读更多

将这些行添加到应用程序的 Gemfile 中:

gem 'coderay' #optional for Syntax Highlighting
gem 'redcarpet'
gem 'emd'

然后执行:

bundle

要在代码块上创建 markdown 部分、查看或启用语法高亮,请访问emd 的用法

于 2019-07-12T03:06:36.893 回答
1

这是我的解决方案

宝石文件

gem "redcarpet"

配置/初始化程序/markdown_renderer.rb

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

app/helpers/application_helper.rb

def markdown(text)
  MarkdownRenderer.render(text).html_safe
end

你的看法

<%= markdown(@post.content) %>
于 2021-06-23T11:10:00.353 回答