Actualmente, tengo una lista que muestra un elemento de lista, para cada vehículo dentro de nuestra base de datos.

Ej:

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

Lo que quiero es simplemente agregar un banner después de cada 10 autos. (De probablemente, cientos de autos). ¿Cuál es la mejor manera de hacer esto?

0
Andrew Ice 9 feb. 2015 a las 20:59

2 respuestas

La mejor respuesta

David tiene la idea correcta, pero está haciendo mucho trabajo extra. Rails hace esto por ti. De Guías de rieles:

Rails también hace que una variable de contador esté disponible dentro de un parcial llamado por la colección, llamado así por el miembro de la colección seguido de _counter. Por ejemplo, si está renderizando @products, dentro del parcial puede hacer referencia a product_counter para saber cuántas veces se ha renderizado el parcial. Esto no funciona junto con la opción as: :value.

En este caso, todo lo que necesita hacer es agregar esto a su parcial:

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

(O puede invocar un método auxiliar como lo hace David).

4
Jordan Running 9 feb. 2015 a las 18:21

Recomendaría crear una variable local en el código que pegó en su pregunta para usarla como iterador. Dentro del parcial, puede usar este tipo de lógica:

<%= ad_helper_func if @iterator_var % 10 == 0 %>
<% @iterator_var += 1 %>
1
David Hoelzer 9 feb. 2015 a las 18:03