Как получить доступ к ключам базы данных Mongo для отображения значений в представлении Haml с MongoMapper в Sinatra? - PullRequest
1 голос
/ 21 марта 2012

Мне тяжело рендерить представление в Haml, используя MongoMapper для небольшого приложения Sinatra, над которым я работаю. У меня есть вот это, я знаю, что запрос неплох:

get '/admin' do
  protected!
  @title = "admin"

  @total_items = Item.all(:order=>:itemtype.desc)

  haml :admin, :locals => @total_items
end

Теперь проблема в том, что я пытаюсь использовать переменную экземпляра @total_items в моем представлении Haml, чтобы иметь возможность выводить ключи в упорядоченном списке после извлечения каждого элемента с помощью цикла:

%div 
  %img     
  - @total_items.each do |item|
  %h3= item

и я застрял. Как мне получить доступ к ключам? Спасибо!

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Есть некоторые проблемы с вашим кодом:

Если вы используете переменные экземпляра, вам не нужно использовать :locals. В любом случае они доступны в ваших представлениях. Так что либо используйте total_items и используйте :locals, либо используйте @total_items и получите к ним доступ, как в ваших представлениях. Кстати, :locals используются так:

haml  :admin, :locals => {:items => total_items}

тогда вы можете получить доступ в admin.haml к вашему total_items как items

Возвращаясь к вашему вопросу: в вашем файле admin.haml есть небольшая ошибка, которую легко исправить: убедитесь, что вы правильно сделали отступ. В конце концов, это то, что хамл о:

%div 
  %img     
  -items.each do |item| # I use the above mentioned :locals with items instead of total_items
    %h3= item

Edit: Вы могли бы даже сделать это проще, запрашивая предметы из вашего поля зрения:

%div 
  %img     
  -Item.all(:order=>:itemtype.desc).each do |item|
    %h3= item

PS: Для чего нужен тег %img? Это не используется в вашем примере.

1 голос
/ 21 марта 2012

Итак, что я делаю, так это и работает отлично:

%div      
-Item.all.each do |item|
%ul
  %li= item[:itemtype]
  %li= item[:desc]
  %li= item[:size]
  %li= item[:price]
  %li= item[:image]
...