Rails 部分破解:每个部分传递 2 条记录?或者更好的主意?
Rails partial hacking: pass 2 records per partial? Or a better idea?
我正在创建用于打印标签的视图。我 HTML'd / CSS'd a table 具有正确尺寸的 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".
有什么建议或想法吗?
我确实尝试过将其格式化为 div(如来自黑暗时代的 this strategy)而不是 table 列,但数学变得非常混乱,因为页边距和装订线不对齐好起来。
第一个运行
这真的很丑吧?
@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>
看到把你的集合当数组使用没问题,可以用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 %>
我正在创建用于打印标签的视图。我 HTML'd / CSS'd a table 具有正确尺寸的 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".
有什么建议或想法吗?
我确实尝试过将其格式化为 div(如来自黑暗时代的 this strategy)而不是 table 列,但数学变得非常混乱,因为页边距和装订线不对齐好起来。
第一个运行
这真的很丑吧?
@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>
看到把你的集合当数组使用没问题,可以用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 %>