我有一个简单的sinatra应用程序,它使用haml和sass作为视图。其中一个视图(位于视图文件夹中)是我的导航菜单的一部分。我试图从index.haml渲染它,但我得到以下错误:错误的参数数量(1为2)
我正在尝试使用index.haml
中的以下行进行渲染.navigation
= render :partial => "nav"
答案 0 :(得分:59)
你可以使用Sinatra的haml函数:
= haml :nav
答案 1 :(得分:13)
或者你可以这样做:
helpers do
def partial(page, options={})
haml page.to_sym, options.merge!(:layout => false)
end
end
并将您的部分内容包括在内:
= partial( "something-rad" )
答案 2 :(得分:8)
以下是我的表现方式(比@ kfl62的答案更简单,比@ jm3的答案功能更丰富):
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
答案 3 :(得分:7)
编辑:!!!已过时!!! 请阅读下面的Jason's回答!
你在rails
尝试做什么工作! Sinatra
没有partial
方法。来自partial
的{{1}}的实现看起来像来自github的 this (source gist):
Sinatra
包含此方法,您可以在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
文件中拨打partial
,例如
.haml
如果您希望= partial("partial_name")
其他视图中的视图语法为
render
请注意= render(:haml,:'rel_path_to_view',:locals => {:optional => option})
和rails
方法之间关于sinatra
方法的语法差异!