如何在sinatra视图中渲染部分(haml中的haml)?

我有一个简单的sinatra应用程序,使用haml和sass的视图。 其中一个视图(位于视图文件夹中)是导航菜单的一部分。 我试图从index.haml渲染它,但我得到以下错误:错误的参数数量(1为2)

我试图用index.haml中的以下行渲染它

.navigation = render :partial => "nav" 

编辑:!!! 过时!!! 阅读杰森的答案如下!

你在尝试在rails工作的是什么! Sinatra没有partial方法。 Sinatra上的partial实现从github看起来像这样(源要点) :

 module Haml module Helpers def partial(template, *args) template_array = template.to_s.split('/') template = template_array[0..-2].join('/') + "/_#{template_array[-1]}" options = args.last.is_a?(Hash) ? args.pop : {} options.merge!(:layout => false) if collection = options.delete(:collection) then collection.inject([]) do |buffer, member| buffer << haml(:"#{template}", options.merge(:layout => false, :locals => {template_array[-1].to_sym => member})) end.join("\n") else haml(:"#{template}", options) end end end end 

包括此方法,您可以在.haml文件中调用partial ,例如
= partial("partial_name")

如果要在其他视图中render视图语法是
= render(:haml,:'rel_path_to_view',:locals => {:optional => option})

注意railssinatra之间关于render方法的语法差异!

你可以使用Sinatra的haml函数:

 = haml :nav 

或者你可以这样做:

 helpers do def partial(page, options={}) haml page.to_sym, options.merge!(:layout => false) end end 

包括你的部分:

 = partial( "something-rad" ) 

这是我的方式(比@ kfl62的答案更简单,比@ jm3的答案更丰富function):

 module Partials def partial( page, variables={} ) haml page.to_sym, {layout:false}, variables end end helpers Partials 

在您的Haml文件中使用它,如:

 %ul#comments - @comments.each do |comment| %li= partial :comment, comment:comment