2008-10-25 34 views
6

可以使用無效的語法編寫Markdown內容。無效意味着BlueCloth庫無法解析內容並引發異常。 Rails中的markdown幫助程序不捕獲任何BlueCloth異常,並且因爲整個頁面無法呈現(而是渲染500服務器錯誤頁面)。如何驗證降價?

對我來說,允許用戶編寫Markdown內容並將其保存到數據庫中。如果某人使用無效的語法,則該內容的所有後續呈現嘗試均失敗(狀態碼500 - 內部服務器錯誤)。

你如何解決這個問題?在保存到數據庫之前,是否可以在模型級驗證Markdown語法?

+0

你可能想知道,BlueCloth有各種問題,並有可用更好的降價庫現在:http://tomayko.com/writings/ruby-markdown-libraries-real-cheap-for-you-two-for-price-of-one – 2008-10-26 09:21:19

回答

9

您應該編寫自己的驗證方法,在其中初始化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 
1

我已經做了一些調查,然後決定用RDiscount,而不是BlueCloth。 RDiscount似乎比BlueCloth快得多,也更可靠。

將RDiscount集成到Rails環境很容易。包括以下內容在你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測試)