在Rails中使用HAML,每当我有一个我希望用户能够轻松格式化的文本字段时,我就会使用HAML的降价过滤器。在看起来像这样的模板中:
.description
:markdown
#{folder.description}
这很有效,但我从来都不喜欢它。如果我在这个文本字段上不需要降价,我就会这样做:
.description= folder.description
在我的一些视图中,有许多文本可以标记为格式化,并且它总是会破坏模板的流程以插入它们。
是否有更简洁的方法在HAML模板中使用markdown格式的文本,或者是否有另一种方法可以将简单的文本格式添加到文本字段中,从而产生更清晰的模板代码?
谢谢!
答案 0 :(得分: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
答案 1 :(得分:2)
当我有可编辑的格式(无论是降价还是纺织品)时,我通常会将html版本和格式版本存储在数据库中。
所以我可能会有folder.description_markdown
和folder.description_html
字段,并且在before_save文件夹或其他适当的位置,我会在那里执行markdown解析,并保存html值。
然后,在您看来,您所需要的只是:
.description= raw folder.description_html
如果您有描述的编辑页面,您将确保文本字段正确编辑description_markdown字段。
我现在要保存纺织品格式的示例之前的on_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模板更容易理解,并且还可以减少每次检索字段时解析markdown的开销。