2008-10-25 7 views
6

Markdown 내용이 유효하지 않은 구문으로 작성 될 수 있습니다. 무효라는 것은 BlueCloth 라이브러리가 내용을 구문 분석하지 못하고 예외를 throw합니다. 레일즈의 markdown 도우미는 BlueCloth 예외를 잡아 내지 못하기 때문에 전체 페이지가 렌더링되지 않습니다 (대신 500 Server Error 페이지가 렌더링 됨).Markdown의 유효성을 검사하는 방법은 무엇입니까?

필자의 경우 사용자는 Markdown 콘텐츠를 작성하여 데이터베이스에 저장할 수 있습니다. 누군가가 유효하지 않은 구문을 사용하면 해당 내용의 모든 연속 렌더링 시도가 실패합니다 (상태 코드 500 - 내부 서버 오류).

이 문제를 어떻게 해결할 수 있습니까? 데이터베이스에 저장하기 전에 모델 수준에서 Markdown 구문의 유효성을 검사 할 수 있습니까?

+0

당신은 BlueCloth 다양한 문제가 있음을 가능한 더 나은 마크 다운 도서관이 있다는 것을 알고 할 수 있습니다 지금 : http://tomayko.com/writings/ruby-markdown-libraries-real-cheap-for-you-two-for-price-of-one –

+0

무효화에 대한 예를 들려 줄 수 있습니까? http://stackoverflow.com/questions/4751032/whats-an-example-of-some-invalid-markdown – Simon

+0

제쳐두고 : 비교를위한 [Babelmark] (http://babelmark.bobtfish.net/)도 참조하십시오. 다른 구현의 결과. – Arjan

답변

9

BlueCloth 개체를 초기화하는 데 사용할 고유 한 유효성 검사 방법을 작성하고 to_html 메서드를 호출하여 예외를 catch하려고 시도해야합니다. 예외를 잡으면 유효성 검사가 실패하고, 그렇지 않으면 오류가 발생합니다. 모델에서

:

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 
1

나는 약간의 연구를 수행하고 대신 BlueCloth의 RDiscount을 사용하기로 결정했습니다. RDiscount는 BlueCloth보다 훨씬 빠르고 안정적 ​​인 것 같습니다.

Rails 환경에서 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 테스트)

관련 문제