代码之家  ›  专栏  ›  技术社区  ›  Christoph Schiessl Joeyjoejoejr

如何验证降价?

  •  6
  • Christoph Schiessl Joeyjoejoejr  · 技术社区  · 16 年前

    可以写 Markdown 语法无效的内容。无效意味着 BlueCloth 库无法分析内容并引发异常。这个 markdown Rails中的helper不会捕获任何BlueBouth异常,因此整个页面无法呈现(而是呈现500个服务器错误页面)。

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

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

    2 回复  |  直到 16 年前
        1
  •  9
  •   Damir Zekić    16 年前

    您应该编写自己的验证方法,在该方法中初始化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
    
        2
  •  1
  •   Christoph Schiessl Joeyjoejoejr    16 年前

    我做了一些研究,决定使用 RDiscount 而不是蓝布。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
    

    (用轨道2.2.0测试)