我很难在Haml中渲染视图,因为我正在为一个小型Sinatra应用程序使用MongoMapper。我这里有这个,我知道查询还不错:
get '/admin' do
protected!
@title = "admin"
@total_items = Item.all(:order=>:itemtype.desc)
haml :admin, :locals => @total_items
end
现在,问题是,我试图在我的Haml视图中使用@total_items实例变量,以便能够在使用循环检索每个项目后输出有序列表中的键:
%div
%img
- @total_items.each do |item|
%h3= item
我被卡住了。如何访问密钥?谢谢
您手头的代码有一些问题:
如果使用实例变量,则不需要使用:locals
。无论如何,在您的视图中都可以访问它们。因此,使用total_items
并使用:locals
,或者使用@total_items
并按视图中的方式访问它们。BTW、:locals
是这样使用的:
haml :admin, :locals => {:items => total_items}
然后你可以在admin.haml中访问你的total_items
作为items
回到你的问题:在admin.haml文件中,有一个很容易修复的小错误:确保缩进正确。毕竟这就是haml的意义所在:
%div
%img
-items.each do |item| # I use the above mentioned :locals with items instead of total_items
%h3= item
编辑:你甚至可以通过从你的视图中查询项目来保持它更简单:
%div
%img
-Item.all(:order=>:itemtype.desc).each do |item|
%h3= item
PS:%img
标签有什么用?你的例子中没有使用它。
所以,我正在做的是这个,它非常完美:
%div
-Item.all.each do |item|
%ul
%li= item[:itemtype]
%li= item[:desc]
%li= item[:size]
%li= item[:price]
%li= item[:image]