Условное закрытие тега в HAML - PullRequest
3 голосов
/ 13 февраля 2012

Я перебираю набор элементов и отображаю их в списках, вложенных в div.Цель состоит в том, чтобы иметь div для каждого дня и в каждом div показывать элементы для этого дня.

Как мне сделать это в HAML?Я не думаю, что могу (или должен) условно закрыть и создать новый тег, как я мог бы в erb.

Я пытался:

- @items.each do |item|
  - if item date is diff from previous make a new container
    .container
      %h2 #{item.date}
      = yield_content :display_item item
  - else
    = yield_content :display_item item

Но это создает следующее:

<div class="container">
<h2>01/28/2012</h2>
      <ul>
            <li>
              ... item
        </li>
      </ul>
</div>
        <li>
        ...item
      </li>

Но я хочу другой элемент в том же самом div.Я использую ruby, sinatra (включая помощник content_for)

1 Ответ

9 голосов
/ 14 февраля 2012

Ответ - использовать больше и лучше Ruby:)

- @items.group_by(&:date).each do |date,items|
  .container
    %h2= date
    - items.each do |item|
      = yield_content :display_item item

См. Enumerable#group_by документы для получения более подробной информации.

Вы могли бы закрыть и снова открыть контейнеры и заголовки, как вы думали , но это ужасный, трудно поддерживаемый взлом, против которого я бы предложил. Прими элегантность Руби и Хамла; не пиши на хамле, как будто это был ERB.

...