2011-03-09 35 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

相关问题