Использование Rails и HAML для вывода объектов в парах - PullRequest
0 голосов
/ 08 марта 2012

Перебирая 'сообщения', я хочу создать строку div, которая будет содержать два элемента div:

<div id="row">
  <div id="post"> ... </div>
  <div id="post"> ... </div>
</div>
<div id="row">
  <div id="post"> ... </div>
  <div id="post"> ... </div>
</div>

Если я попробую это:

- @posts.each_with_index do |post,index|
  - if index %2 == 0
    .row
      .post
  - else
    .post

... тогда я получаю:

<div class="row">
  <div class="post"></div>
</div>
<div class="post"></div>
<div class="row">
  <div class="post"></div>
</div>
<div class="post"></div>

Я понимаю, почему это происходит, но я не могу понять, как это сделать правильно. Есть идеи?

UPDATE: Когда я получаю доступ к атрибутам объекта согласно предложению апноэдивера, я получаю ошибки, когда последний фрагмент содержит только один пост. Например, следующее ...

- @posts.each_slice(2) do |post1, post2|
    .row
      .post= post1.title
      .post= post2.title

возвращает ошибку "неопределенный метод` title 'для nil: NilClass ", если существует нечетное количество сообщений. Чтобы обойти это, я использовал это:

- @posts.each_slice(2) do |post1, post2|
    .row
      .post= post1.title
      .post= post2.title unless post2.nil?

Ответы [ 2 ]

3 голосов
/ 08 марта 2012

Я бы взял свои посты 2 на 2, я не вижу, как поступить иначе с хамлом:

- @posts.each_slice(2) do |post1, post2|
    .row
      .post= post1
      .post= post2
0 голосов
/ 08 марта 2012

Для таких задач я предпочитаю использовать шаблоны erb, что добавляет больше гибкости, используйте его, и вы увидите, что ваша проблема будет решаться так легко.Структурирование хамла накладывает некоторые ограничения на выполнение задач.

<% @posts.each_with_index do |post, index| %>
  <% if index %2 == 0 %>
    <div class="row">
  <% end %>
  <div class="post></div>
  <% if index %2 != 0 %>
    </div>
  <% end %>
<% end %>
...