문제

글을 쓸 수 있습니다 가격 인하 유효하지 않은 구문이있는 내용. 유효하지 않은 것은 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으로 테스트)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top