【问题标题】:Rails - Mix erb tags with markdownRails - 将 erb 标签与降价混合
【发布时间】:2015-08-13 17:09:08
【问题描述】:

我希望我博客网站上的用户能够在文本区域中输入 markdown 文本来发表博文。然后将使用 Redcarpet 或 kramdown 等工具转换此降价文本。现在我还希望用户能够调用部分视图来布置一些图片。所以换句话说,我希望用户能够在他的降价文本之间的任何地方输入以下代码(并且它被解释为 erb 代码)

<%= render partial: "slider", locals: {imgs: ["image1.jpg", "image2.jpg"]} %>

这有可能吗? kramdown 允许您使用块级 HTML 标记(div、p、pre、...),所以也许这可以用于某些优势?

【问题讨论】:

  • 您真的应该将 EDIT 标记为不同的问题,用液体和红宝石标记它,这样您也可以从液体标记用户那里获得适当的帮助。我个人从未创建过液体标签,但通过检查 Jekyll (ruby gem) 示例应该很简单
  • 我提出了一个新问题:stackoverflow.com/questions/31999241/…

标签: ruby-on-rails ruby markdown erb


【解决方案1】:

您真的希望您的客户能够编写 ERB 吗?这是非常危险的,他们可以使用 ERB 中的任何 Ruby 函数,包括内核函数。允许一个简单的模板系统怎么样,无论是自定义的还是现有的。例如,您可以使用Liquid(来自 Shopify),提供一些自定义标签,这样他们就不需要所有样板,而只需要像 {% dosomething 'partial', 'img1', 'img2' %} 这样的东西,然后您首先将液体转换为普通文本,然后将降价转换为 html, 缓存它并将其显示给用户。一个例子:

# get your customer text from somewhere, like params[:markdown_text]
template = params[:markdown_text]
markdown = Liquid::Template.parse(template).render
html_text = Redcarpet::Markdown.new(renderer, extensions = {}).render(markdown)

puts html_text.to_s # => text with html tags, ensure to use `html_safe` on it in views

你的文字准备好了

【讨论】:

    猜你喜欢
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多