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 那样调用辅助方法。)
目前,我有一个列表显示我们数据库中每辆车的列表项。
例如:
= 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 toproduct_counter
to tell you how many times the partial has been rendered. This does not work in conjunction with theas: :value
option.
在这种情况下,您需要做的就是将其添加到您的部分:
<% if list_item_counter % 10 == 0 %>
<!-- Ad banner goes here -->
<% end %>
(或者您可以像 David 那样调用辅助方法。)