Ruby 如何在sinatra视图中渲染局部(haml中的haml)?
我有一个简单的sinatra应用程序,它使用haml和sass进行查看。其中一个视图(位于“视图”文件夹中)是“我的导航”菜单的一部分。我试图从index.haml呈现它,但我得到了以下错误:参数数量错误(1代表2) 我试图在index.haml中用以下几行来渲染它Ruby 如何在sinatra视图中渲染局部(haml中的haml)?,ruby,view,sinatra,haml,Ruby,View,Sinatra,Haml,我有一个简单的sinatra应用程序,它使用haml和sass进行查看。其中一个视图(位于“视图”文件夹中)是“我的导航”菜单的一部分。我试图从index.haml呈现它,但我得到了以下错误:参数数量错误(1代表2) 我试图在index.haml中用以下几行来渲染它 .navigation = render :partial => "nav" 编辑:!!!过时阅读下面的答案 您正在尝试的是在rails中工作的内容Sinatra没有partial方法。Sinatra上的partial实
.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
模块助手
def部分(模板,*args)
template_array=template.to_.s.split('/'))
template=template_数组[0..-2]。联接('/')+“/{template_数组[-1]}”
options=args.last.is_a?(散列)?args.pop:{}
选项。合并!(:布局=>false)
如果collection=options.delete(:collection),则
collection.injection([])do |缓冲区,成员|
缓冲器
false,:locals=>{template_array[-1]。to_sym=>member})
结束。加入(“\n”)
其他的
haml(:“#{template}”,选项)
结束
结束
结束
结束
包括此方法,您可以在.haml
文件中调用partial
,如=部分(“部分名称”)
如果要呈现
其他视图中的视图,语法为=render(:haml,:'rel_path_to_view',:locals=>{:optional=>option})
注意
rails
和sinatra
之间关于render
方法的语法差异 或者您可以这样做:
helpers do
def partial(page, options={})
haml page.to_sym, options.merge!(:layout => false)
end
end
并将您的部分内容包括在:
= partial( "something-rad" )
我是这样做的(比@kfl62的答案更简单,比@jm3的答案更丰富):
模块部分
def partial(第页,变量={})
haml page.to_sym,{layout:false},变量
结束
结束
助手部分
在Haml文件中使用它,如:
%ul#注释
-@comments.each do| comment|
%li=部分:注释,注释:注释
您只需使用Sinatra的haml功能即可:
= haml :nav
如果你想要更多的答案,我建议在tagsI中添加
ruby
,我知道这是非常古老的Phrogz,但我想指出的是。。。“haml page.to_sym,{layout:false},variables”可能应该是“haml page.to_sym,{:layout=>false},variables”@user766987您所说的适用于旧的1.8和1.9;我的答案是使用Ruby 1.9语法。就代码清洁度而言,这胜过所有其他解决方案。这是迄今为止最好的答案。你不需要任何特殊的代码,它是内置的!如果你有正确使用红地毯的设置,你可以用markdown:README来逃避。我真不明白为什么有人会否决一个明显过时的答案。当时这是对的。LoL不要紧:)因为我看到人们仍然在链接这个答案,所以我从gist中提取了代码,并将其制作成一个gem,它(原始gist的作者)也因此做出了贡献。它有后续的改进和规格等。我认为最好是被否决,以便更好的答案可以列在上面。嗯,我知道它实际上不应该这样做,但是它应该有一个功能来处理过时的答案。