Come convalidare Markdown?
-
04-07-2019 - |
Domanda
È possibile scrivere Markdown con sintassi non valida. Non valido significa che la libreria BlueCloth non analizza il contenuto e genera un'eccezione. L'helper markdown
in Rails non rileva alcuna eccezione BlueCloth e per questo motivo la pagina completa non viene visualizzata (viene invece visualizzata la pagina Errore server 500).
Nel mio caso, gli utenti sono autorizzati a scrivere contenuti Markdown e salvarli nel database. Se qualcuno utilizzava una sintassi non valida, tutti i successivi tentativi di rendering di quel contenuto falliscono (Codice stato 500 - Errore interno del server).
Come aggirare questo problema? È possibile convalidare la sintassi Markdown a livello di modello prima di salvare nel database?
Soluzione
Dovresti scrivere il tuo metodo di convalida in cui si inizializzerebbe l'oggetto BlueCloth e provare a chiamare il metodo to_html
catturando qualsiasi eccezione. Se ricevi un'eccezione, la convalida non riesce, altrimenti dovrebbe essere ok.
Nel tuo modello:
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
Altri suggerimenti
Ho fatto un po 'di ricerche e ho deciso di utilizzare RDiscount invece di BlueCloth. RDiscount sembra essere molto più veloce e più affidabile di BlueCloth.
È facile integrare RDiscount nel tuo ambiente Rails. Includi quanto segue nel tuo environment.rb
e sei pronto per iniziare:
begin
require "rdiscount"
BlueCloth = RDiscount
rescue LoadError
# BlueCloth is still the our fallback,
# if RDiscount is not available
require 'bluecloth'
end
(testato con Rails 2.2.0)