Rails 迭代后添加横幅

Rails add banner after iteration

目前,我有一个列表显示我们数据库中每辆车的列表项。

例如:

= render partial: 'list_item', collection: (@vehicles && vehicles), as: :vehicle

我想要的只是每10辆车后加一个横幅。 (可能有 100 辆汽车。)解决这个问题的最佳方法是什么?

我建议在您粘贴到问题中的代码中创建一个局部变量以用作迭代器。在部分中,您可以使用这种类型的逻辑:

<%= ad_helper_func if @iterator_var % 10 == 0 %>
<% @iterator_var += 1 %>

David 的想法是正确的,但他做了很多额外的工作。 Rails 为您做这件事。来自 Rails Guides:

Rails also makes a counter variable available within a partial called by the collection, named after the member of the collection followed by _counter. For example, if you're rendering @products, within the partial you can refer to product_counter to tell you how many times the partial has been rendered. This does not work in conjunction with the as: :value option.

在这种情况下,您需要做的就是将其添加到您的部分:

<% if list_item_counter % 10 == 0 %>
  <!-- Ad banner goes here -->
<% end %>

(或者您可以像 David 那样调用辅助方法。)