Markdown을 검증하는 방법?
-
04-07-2019 - |
문제
글을 쓸 수 있습니다 가격 인하 유효하지 않은 구문이있는 내용. 유효하지 않은 것은 Bluecloth 라이브러리는 내용을 구문 분석하지 못하고 예외를 던졌습니다. 그만큼 markdown
Rails의 도우미는 Bluecloth 예외를 포착하지 않으며 전체 페이지가 렌더링되지 않기 때문에 (500 서버 오류 페이지가 대신 렌더링됩니다).
제 경우에는 사용자가 Markdown 컨텐츠를 작성하여 데이터베이스에 저장할 수 있습니다. 누군가가 유효하지 않은 구문을 사용한 경우 해당 컨텐츠의 모든 연속 렌더링 시도가 실패합니다 (상태 코드 500- 내부 서버 오류).
이 문제를 어떻게 해결합니까? 데이터베이스에 저장하기 전에 모델 수준에서 Markdown 구문을 검증 할 수 있습니까?
해결책
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보다 훨씬 빠르고 신뢰할 수있는 것 같습니다.
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으로 테스트)
제휴하지 않습니다 StackOverflow