Как проверить Markdown?

можно писать Markdown содержимое с недопустимым синтаксисом. Недопустимый означает, что BlueCloth библиотеке не удается проанализировать содержимое и выдает исключение. The markdown helper в Rails не ловит исключений BlueCloth, и из-за этого полная страница не отображается (вместо этого отображается страница ошибки сервера 500).

в моем случае пользователям разрешено записывать содержимое Markdown и сохранять его в базе данных. Если кто-то использовал недопустимый синтаксис, все последовательные попытки рендеринга этого содержимого завершаются неудачей (код состояния 500 - Внутренняя ошибка сервера).

Как обойти эту проблему? Можно ли проверить синтаксис Markdown на уровне модели перед сохранением в базе данных?

2 ответов


вы должны написать свой собственный метод проверки, в котором вы инициализируете объект 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 в вашей окружающей среде рельсов. Включите в свой 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)