Как проверить уценку? - PullRequest
6 голосов
/ 26 октября 2008

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

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

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

Ответы [ 2 ]

9 голосов
/ 26 октября 2008

Вы должны написать свой собственный метод проверки, в котором вы бы инициализировали объект 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 голос
/ 10 ноября 2008

Я провел небольшое исследование и решил использовать 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...