我很难在Haml中渲染视图,使用MongoMapper作为我正在研究的小型Sinatra应用程序。 我在这里有这个,我知道查询不错:
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
我被卡住了。如何访问密钥?谢谢!
答案 0 :(得分:2)
您的代码存在一些问题:
如果您使用实例变量,则无需使用: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
标签的优点是什么?它没有在你的例子中使用。
答案 1 :(得分:1)
所以,我正在做的就是这样,它完美地运作:
%div
-Item.all.each do |item|
%ul
%li= item[:itemtype]
%li= item[:desc]
%li= item[:size]
%li= item[:price]
%li= item[:image]