Как проверить 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)