2009-08-22 56 views
1

我的CMS rails应用程序中有一个'模板'系统。基本上,整个HTML模板存储在数据库列中,并且在字符串中包含关键代码(如<!--THEME_Body-->),该代码将被应用程序生成的内容替换。解析rails中的'模板'(gsub的替代品)

我使用实际布局来呈现模板。所有这一切都在布局是:

<%= generate_theme.gsub!('<!--THEME_Body-->', yield) -%> 

该助手采取了正确的主题,并进一步gsubs其他区域,如元数据和面包屑。

我只是想知道是否有更好的方式去做这件事?也许使用content_for或类似的东西?

回答

1

虽然我会利用Ruby的性感语法将所有行整合到语法上更加正确的语句中,但这是一种很好的方式,但它会加快脚本的速度,并且它看起来也该死!

tags = { 
    '<!--THEME_Body-->' => yield, 
    '<!--THEME_Head-->' => yield(:head), 
    '<!--STYLESHEET-->' => stylesheet_link_tag('application') 
} 

tags.each { |str, rep| generate_theme.gsub!(str, rep) } 

记住,这个代码不应该在一个视图中去 - 这应该理想地被放在一个模型,因为它是与应用程序的数据做的,但它也能去一个帮手的地方。如果它的模型的实例变量,你可以只调用

generate_theme.parse 

而且该代码可以被执行 - 它看起来好了很多,坚持尽可能多地清理视图的标准MVC约定。

杰米

+1

老兄,这很酷:)我会在星期一给它一个旋风:) – 2009-08-22 10:26:18