7

無効な構文でMarkdownコンテンツを作成する可能性があります。無効とは、BlueClothライブラリがコンテンツの解析に失敗し、例外をスローすることを意味します。Railsのmarkdownヘルパーは BlueCloth 例外をキャッチしないため、ページ全体のレンダリングに失敗します (代わりに 500 サーバー エラー ページがレンダリングされます)。

私の場合、ユーザーは 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

少し調べた結果、BlueCloth の代わりに RDiscount を使用することにしました。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 でテスト済み)

于 2008-11-10T10:37:26.347 に答える