如何使用Sinatra中的MongoMapper访问Mongo数据库密钥以在Haml视图中呈现值



我很难在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]

最新更新