有条件地关闭HAML中的标签

aar*_*aar 4 haml

我正在迭代一组项目并将它们显示在嵌套在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
Run Code Online (Sandbox Code Playgroud)

但这会产生以下结果:

<div class="container">
<h2>01/28/2012</h2>
      <ul>
            <li>
              ... item
        </li>
      </ul>
</div>
        <li>
        ...item
      </li>
Run Code Online (Sandbox Code Playgroud)

但是我希望同一个div中的其他项目.我正在使用ruby,sinatra(包括content_for帮助器)

Phr*_*ogz 10

答案是使用更多更好的Ruby :)

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

有关Enumerable#group_by详细信息,请参阅文档.

可以 按照自己的想法关闭并重新打开容器和标题,但这是一个可怕的,难以维护的黑客,我建议反对.拥抱Ruby和Haml的优雅; 不要写像哈尔一样的哈姆.