Sinatra - 这是一个全站点的参数吗?

时间:2014-06-06 17:27:48

标签: ruby sinatra haml

我正在使用haml模板构建Sinatra应用程序,并且想知道是否可以实现某种类型的全站点参数。在我的例子中,这个想法是允许为每条路线选择不同的layout.haml,而不必复制/重写应用中的每条路线。

例如,我想知道是否有可能获得http://domain.com/route/:normal-params/?layout=layout_b,并且能够将?template=template_choice附加到应用中的任何路线并使用适当的布局。

我能想到的唯一解决方案,即效率非常低,是复制每一条路线以查找此参数。我也觉得可以通过Filter以某种方式实现它,但我不确定如何实现这样的事情。

1 个答案:

答案 0 :(得分:2)

您可以在调用haml时指定要加载的布局:

haml :post, :layout => params[:layout].to_sym

通过这种方式,您可以调用http://domain.com/route/foo/bar?layout=layout_b,Sinatra将查找名为layout_b的适当布局以进行渲染。

如果没有作为网址参数提供,您可能希望指定要呈现的默认布局:

haml :post, :layout => (params[:layout] || "default").to_sym