从实例变量中使用 Slim/Rails 渲染降价

Rendering markdown with Slim/Rails from an instance var

我无法让 Slim 呈现我的降价:

div.container
    div.row
        div.col-md-8.job_description
            markdown: 
                = @listing.job_description

这只是呈现字符串

This is an h1 ## h2 ### h3 > this is a quote * hello * goodbye foo

没有换行符或任何东西(包含在实际字符串中)

如何正确渲染它?谢谢!

看起来你的 markdown 内容没有在 markdown: 下缩进,所以它不会被 markdown 处理。

它应该看起来更像这样:

div.col-md-8.job_description
  markdown: 
    = @listing.job_description

有关详细信息,请参阅 this section of the docs

我放弃了在 slim 中使用 markdown:,尝试了所有方法。

我最终创建了这个助手,将它放在 app/helpers

中的任何文件中
def markdown(content)
  return '' if content.blank?
  markdown = Redcarpet::Markdown.new(Redcarpet::Render::XHTML, autolink: true, space_after_headers: true)
  sanitize(markdown.render(content)).html_safe
end

然后在视图中

= markdown @listing.job_description

您当然必须安装 redcarpet gem。

gem 'redcarpet'

不可能以这种方式从变量中渲染 Markdown,因为 Slim 首先渲染 Markdown(或任何其他嵌入式引擎语言),然后才插入变量内容。

它以这种方式工作是有道理的,因为 Slim 的嵌入式引擎标签旨在作为一种内联包含不同语言的方式,以便您可以在那里阅读它们。如果 markdown 没有以文字形式包含在模板中,那么在将 Markdown 传递给 Slim 之前使用嵌入式引擎并没有比简单地渲染 Markdown 有任何优势(如 HTML,并使用 '==' 来防止进一步由 Slim 处理)。

我还认为,它是这样设置的,因为它旨在提供将文本插入 Markdown 的简便方法——Markdown 本身没有插入方法——在与其他所有内容相同的模板中。

冰人建议的助手是一个很好的方法。我可能会在模板之外调用它,但这只是因为我个人喜欢在模板内尽可能少地做。