Markdownを検証する方法は?
-
04-07-2019 - |
質問
無効な構文を使用して Markdown コンテンツを作成することは可能です。無効とは、 BlueCloth ライブラリがコンテンツの解析に失敗し、例外をスローすることを意味します。 Railsの markdown
ヘルパーはBlueClothの例外をキャッチしません。そのため、ページ全体がレンダリングに失敗します(代わりに500 Server Errorページがレンダリングされます)。
私の場合、ユーザーはMarkdownコンテンツを書き、データベースに保存することができます。誰かが無効な構文を使用した場合、そのコンテンツの連続したレンダリング試行はすべて失敗します(ステータスコード500-内部サーバーエラー)。
この問題をどのように回避しますか?データベースに保存する前にモデルレベルでMarkdown構文を検証することは可能ですか?
解決
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
他のヒント
少し調査を行った結果、 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でテスト済み)
所属していません StackOverflow