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?

È stato utile?

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)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top