7

使用无效语法编写Markdown内容是可能的。无效意味着BlueCloth库无法解析内容并引发异常。Rails 中的markdown帮助程序不会捕获任何 BlueCloth 异常,因此无法呈现完整页面(而是呈现 500 Server Error 页面)。

在我的例子中,允许用户编写 Markdown 内容并将其保存到数据库中。如果有人使用了无效语法,则该内容的所有连续呈现尝试都会失败(状态代码 500 - 内部服务器错误)。

你如何解决这个问题?是否可以在保存到数据库之前在模型级别验证 Markdown 语法?

4

2 回答 2

10

您应该编写自己的验证方法,在该方法中初始化 BlueCloth 对象,并尝试调用to_html捕获任何异常的方法。如果捕获异常,则验证失败,否则应该没问题。

在您的模型中:

protected:

def validate
  bc = BlueCloth.new(your_markdown_string_attribute)
  begin
    bc.to_html
  rescue
    errors.add(:your_markdown_string_attribute, 'has invalid markdown syntax')
  end
end
于 2008-10-25T23:32:05.437 回答
1

我做了一些研究并决定使用RDiscount而不是 BlueCloth。RDiscount 似乎比 BlueCloth 更快、更可靠。

在 Rails 环境中集成 RDiscount 很容易。包括以下内容environment.rb,您就可以开始使用了:

begin
  require "rdiscount"
  BlueCloth = RDiscount
rescue LoadError
  # BlueCloth is still the our fallback,
  # if RDiscount is not available
  require 'bluecloth'
end

(使用 Rails 2.2.0 测试)

于 2008-11-10T10:37:26.347 回答