Pregunta

Es posible escribir Markdown con una sintaxis no válida. No válido significa que la biblioteca BlueCloth no puede analizar el contenido y lanza una excepción. El asistente de markdown en Rails no detecta ninguna excepción de BlueCloth y, debido a eso, la página completa no se procesa (en su lugar, se representa la página de 500 errores de servidor).

En mi caso, los usuarios pueden escribir contenido de Markdown y guardarlo en la base de datos. Si alguien usó una sintaxis no válida, todos los intentos de representación sucesivos de ese contenido fallan (Código de estado 500 - Error interno del servidor).

¿Cómo solucionas este problema? ¿Es posible validar la sintaxis de Markdown en el nivel de Modelo antes de guardar en la base de datos?

¿Fue útil?

Solución

Debería escribir su propio método de validación en el que inicializaría el objeto BlueCloth e intente llamar al método to_html para detectar cualquier excepción. Si detecta una excepción, la validación falla, de lo contrario debería estar bien.

En tu modelo:

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

Otros consejos

He investigado un poco y he decidido utilizar RDiscount en lugar de BlueCloth. RDiscount parece ser mucho más rápido y más confiable que BlueCloth.

Es fácil integrar RDiscount en su entorno Rails. Incluya el siguiente recorte en su environment.rb y estará listo para comenzar:

begin
  require "rdiscount"
  BlueCloth = RDiscount
rescue LoadError
  # BlueCloth is still the our fallback,
  # if RDiscount is not available
  require 'bluecloth'
end

(probado con Rails 2.2.0)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top