2011-03-09 21 views
2

在Rails中使用HAML時,無論何時我想讓用戶能夠輕鬆格式化某種文本字段,我都會使用HAML的降格過濾器。在看起來像這樣的模板中:是否有更簡潔的方式在HAML中啓用降價輸出?

.description 
    :markdown 
    #{folder.description} 

這有效,但我從來沒有真正喜歡它。如果我沒必要在這個文本字段降價我也只是做:

.description= folder.description 

在一些我的看法有可以減價格式化文本的許多情況下,它總是打破了模板的流程插入它們。

在HAML模板中是否有更簡單或更簡潔的方法來使用降格格式的文本,或者是否存在將簡單文本格式添加到文本字段以產生更清晰的模板代碼的替代方法?

謝謝!

回答

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 2011-03-09 16:13:29

+0

'xml_safe'?我有一個錯誤。改爲使用:'raw BlueCloth :: new(text).to_html' – 2012-10-24 20:06:43

2

當我有可編輯的格式(無論是降價還是紡織品)時,我通常將html版本和格式版本都存儲在數據庫中。

所以我可能會有folder.description_markdownfolder.description_html字段,並在before_save文件夾或其他適當的位置我會執行降價解析那裏,並保存html值。

然後,在你看來,所有你需要的是:

.description= raw folder.description_html 

如果你有一個編輯頁面的描述,你會確保文本字段被正確地編輯description_markdown領域。

before_save回調我現在所擁有的,以節省紡織格式的一個例子是在這裏:

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模板更容易執行,而且也減少了從不必解析降價每次開銷該領域的時間被檢索。

+0

有趣的想法...我會測試它的一些! – Andrew 2011-03-09 01:42:55

相關問題