2011-03-09 4 views
2

레일에서 HAML을 사용할 때 사용자가 쉽게 포맷 할 수 있도록하려는 텍스트 필드가있을 때마다 HAML의 마크 다운 필터를 사용합니다. 다음과 같은 템플릿에서 :HAML에서 마크 다운 출력을 사용하는 더 깨끗한 방법이 있습니까?

.description 
    :markdown 
    #{folder.description} 

이 작품은 작동하지만, 나는 그것을 정말로 좋아하지 않습니다. 내 의견의 일부에서

.description= folder.description 

가 인하가 서식 할 수있는 텍스트의 많은 경우가 있고, 항상 템플릿의 흐름을 나누기 :이 텍스트 필드에 가격 인하가 필요하지 않은 경우 그냥 일을 할 것입니다 그들을 삽입합니다.

HAML 템플릿에서 markdown 형식의 텍스트를 사용하는 방법이 더 간단하거나 간단합니까? 또는 텍스트 필드에 간단한 텍스트 서식을 추가하여 템플릿 코드를보다 명확하게 만들 수있는 다른 방법이 있습니까?

감사합니다.

답변

6

내가 같은 간단한 도우미, 뭔가 제안 :

# app/helpers/application_helper.rb 
def markdown(text) 
    BlueCloth::new(text).to_html.xml_safe 
end 
alias :md :markdown 

# app/views/folders/show.html.haml 
.description= md folder.description 
+0

정말 고마워! – Andrew

+0

'xml_safe'? 내가 잘못 했어. 대신'raw BlueCloth :: new (text) .to_html'을 사용합니다. –

2

필자는 컴파일 가능한 서식 (markdown 또는 textile이든)을 사용하여 일반적으로 html 버전과 형식 버전을 모두 데이터베이스에 저장합니다.

그래서 나는 아마도 folder.description_markdownfolder.description_html 필드를 가지게 될 것이고, 폴더 나 다른 적당한 위치의 before_save에 거기서 마킹 다운 분석을 수행하고 html 값을 저장할 것입니다.

.description= raw folder.description_html 

그리고 당신이 설명에 대한 편집 페이지가있는 경우 텍스트 필드가 올바르게 description_markdown 필드를 편집되어 있는지 확인합니다 :

그런 다음보기에서, 당신이 필요로하는 모든입니다.

나는이 느낌
class Page < ActiveRecord::Base 
    validates_presence_of :name 
    validates_uniqueness_of :name 

    # Note that the {attr}_changed? method is given to you 
    # by ActiveRecord for every database field on your model. 
    before_save :update_html, :if => :textile_changed? 

    def convert_textile 
    RedCloth.new(textile).to_html 
    end 

    protected 
    def update_html 
     self.html = convert_textile 
    end 
end 

가 따라야 할 HAML 템플릿 쉽게, 또한 가격 인하의 모든 구문을 분석 할 필요가 오버 헤드를 감소 :

나는 섬유 서식을 저장하는 지금이 콜백 before_save 예는 바로 여기 필드가 검색되는 시간

+0

재미있는 생각을 ... 나는 몇 가지를 테스트거야! – Andrew

관련 문제