Question

Il est possible d'écrire un contenu Markdown avec une syntaxe non valide. Non valide signifie que la bibliothèque BlueCloth ne parvient pas à analyser le contenu et lève une exception. L'assistant markdown de Rails n'intercepte pas les exceptions BlueCloth et, de ce fait, le rendu de la page complète échoue (la page 500 Erreur de serveur est rendue à la place).

Dans mon cas, les utilisateurs sont autorisés à écrire du contenu Markdown et à l'enregistrer dans la base de données. Si quelqu'un utilise une syntaxe non valide, toutes les tentatives de rendu successives de ce contenu échouent (Code d'état 500 - Erreur interne du serveur).

Comment gérez-vous ce problème? Est-il possible de valider la syntaxe Markdown au niveau du modèle avant de l'enregistrer dans la base de données?

Était-ce utile?

La solution

Vous devriez écrire votre propre méthode de validation dans laquelle vous initialiseriez l'objet BlueCloth et essayer d'appeler la méthode to_html en capturant toute exception. Si vous attrapez une exception, la validation échoue, sinon, ça devrait aller.

Dans votre modèle:

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

Autres conseils

J'ai fait quelques recherches et décidé d'utiliser RDiscount au lieu de BlueCloth. RDiscount semble être beaucoup plus rapide et plus fiable que BlueCloth.

Il est facile d’intégrer RDiscount dans votre environnement Rails. Incluez les éléments suivants dans votre environment.rb et vous êtes prêt à commencer:

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

(testé avec Rails 2.2.0)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top