سؤال

ومن الممكن أن يكتب تخفيض السعر المحتوى مع بناء جملة غير صالح. يعني غير صالح أن BlueCloth مكتبة فشل تحليل المحتوى ويطرح استثناء. المساعد markdown في القضبان لا يصاب أي استثناءات BlueCloth وبسبب ذلك فشل صفحة كاملة لتقديم (500 صفحة خطأ خادم يتم تقديم بدلا من ذلك).

في حالتي، ويسمح للمستخدمين لكتابة محتوى تخفيض السعر وحفظه إلى قاعدة البيانات. اذا كان شخص ما تستخدم بناء جملة غير صالح، فشلت كل محاولات تقديم المتعاقبة لهذا المحتوى (رمز الحالة 500 - خطأ خادم داخلي).

وكيف تحصل تغلب على هذه المشكلة؟ هل من الممكن أن تحقق بناء الجملة تخفيض السعر على مستوى نموذج قبل الحفظ إلى قاعدة البيانات؟

هل كانت مفيدة؟

المحلول

ويجب عليك أن تكتب طريقة التحقق من صحة الخاصة بك التي كنت تهيئة الكائن 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

نصائح أخرى

ولقد فعلت قليلا من البحوث وقرر استخدام RDiscount بدلا من ذلك من BlueCloth. RDiscount يبدو أن أسرع وأكثر موثوقية من BlueCloth.

من السهل أن دمج RDiscount في بيئة القضبان الخاصة بك. تشمل ما يلي مقصوص في environment.rb الخاص بك وكنت على استعداد للذهاب:

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

و(اختبار مع القضبان 2.2.0)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top