Rails частичный взлом: пропустить 2 записи на частичный?Или лучшая идея? - PullRequest
0 голосов
/ 15 ноября 2018

Я создаю представление для печати этикеток.У меня есть HTML'd / CSS'd таблица с правильными размерами для 2 столбцов по 5 меток:

<div id="inventory_labels">
  <table class="table-bordered" id="avery8163">
    <thead>
      <tr>
        <td style='width: .155in;'></td>
        <td style='width: 4in;'></td>
        <td style='width: .19in;'></td>
        <td style='width: 4in;'></td>
        <td style='width: .155in;'></td>
      </tr>
    </thead>
    <tfoot>
      <tr>
        <td colspan="5"></td>
      </tr>
    </tfoot>
    <tbody>
      <% 40.times do # just a placeholder for the actual loop / partial %>
        <tr>
          <td></td>
          <td>LABEL #1 (should be a record)</td>
          <td></td>
          <td>LABEL #2 (should be a record)</td>
          <td></td>
        </tr>
      <% end %>
    </tbody>
  </table>
</div>

И SCSS:

#inventory_labels {
  width: 8.5in;
  margin-right: auto;
  margin-left: auto;
}

table#avery8163 {
  table-layout: fixed;
  width: 8.5in;

  thead, tfoot {
    td {
      height: .5in;
    }
  }

  tbody {
    td {
      height: 2in;
    }
  }
}

@media print {
  table#avery8163 {
    thead { 
      display: table-header-group;
    }

    tfoot { 
      display: table-footer-group;
    }
  }
}

Я бы хотелиспользуйте частичное для циклического перебора записей в <tbody>, но мне нужно зацикливаться на 2 за раз, по одному для каждого "LABEL".

Есть предложения или идеи?

Iдействительно играл с форматированием как div (как эта стратегия из темных веков) вместо столбцов таблицы, но математика стала очень запутанной, так как поле страницы и желоба не выстраиваются хорошо.

FIRST RUN

Это действительно уродливо, верно?

@counts - это массив записей ActiveRecord, через который я хочу пройти, определенный в контроллере.

<tbody>
  <% n = 0 %>
  <% @loop.times do # @loop = (@counts.count/2).ceil %>
    <tr>
      <td></td>
      <td>
        <%= render partial: 'label', locals: { count: @counts[n] } %>
        <% n += 1 %>
      </td>
      <td></td>
      <td>
        <% if @counts[n].present? %>
          <%= render partial: 'label', locals: { count: @counts[n] } %>
        <% end %>
        <% n += 1 %>
      </td>
      <td></td>
    </tr>

  <% end %>
</tbody>

1 Ответ

0 голосов
/ 15 ноября 2018

Видя, что ваша коллекция не является проблемой, вы можете использовать in_groups_of метод https://api.rubyonrails.org/classes/Array.html#method-i-in_groups_of

<% @objects.in_groups_of(2, false) do |obj1, obj2| %>
  <tr>
    <td></td>
    <td><%= #something with obj1 %></td>
    <td></td>
    <td><%= #something with obj2, you should check if it's not nil though if the array has an odd length %></td>
    <td</td>
  </tr>
<% end %>
...