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

时间:2012-03-21 03:48:37

标签: ruby mongodb sinatra mongomapper

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

我被卡住了。如何访问密钥?谢谢!

2 个答案:

答案 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]