【发布时间】:2015-04-09 13:48:13
【问题描述】:
目前,我有一个列表,其中显示了我们数据库中每辆车的列表项。
例如:
= render partial: 'list_item', collection: (@vehicles && vehicles), as: :vehicle
我想要的只是在每 10 辆车后添加一个横幅。 (可能有 100 辆汽车。)解决这个问题的最佳方法是什么?
【问题讨论】:
标签: ruby-on-rails ruby iteration
目前,我有一个列表,其中显示了我们数据库中每辆车的列表项。
例如:
= render partial: 'list_item', collection: (@vehicles && vehicles), as: :vehicle
我想要的只是在每 10 辆车后添加一个横幅。 (可能有 100 辆汽车。)解决这个问题的最佳方法是什么?
【问题讨论】:
标签: ruby-on-rails ruby iteration
大卫的想法是正确的,但他正在做很多额外的工作。 Rails 会为您做到这一点。来自Rails Guides:
Rails 还在集合调用的部分中提供了一个计数器变量,该变量以集合成员命名,后跟
_counter。例如,如果您正在渲染@products,则可以在部分中引用product_counter来告诉您部分已被渲染了多少次。这不能与as: :value选项一起使用。
在这种情况下,您只需将其添加到您的部分:
<% if list_item_counter % 10 == 0 %>
<!-- Ad banner goes here -->
<% end %>
(或者您可以像 David 那样调用辅助方法。)
【讨论】:
我建议在您粘贴在问题中的代码中创建一个局部变量,以用作迭代器。在部分中,您可以使用这种类型的逻辑:
<%= ad_helper_func if @iterator_var % 10 == 0 %>
<% @iterator_var += 1 %>
【讨论】: