Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails each loop insert tag every 6 items?

I have X number of image objects that I need to loop through in a view and want to create a new div every 6 objects or so (for a gallery).

I have looked at cycle but it seems to change every other record. Does anyone know of a way to insert code into a view every 6 times?

I could probably do it with nested loops but I am kinda stumped on this one.

like image 922
Dustin M. Avatar asked May 17 '10 19:05

Dustin M.


2 Answers

You can use Enumerable#each_slice in conjunction with #each to avoid inline calculations. each_slice breaks the array into chunks of n, in this case 6.

<% @images.each_slice(6) do |slice| -%>
  <div class="gallery">
    <% slice.each do |image| -%>
      <%= image_tag(image.url, :alt => image.alt) %>
    <% end -%>
  </div>
<% end -%>
like image 148
thorncp Avatar answered Oct 05 '22 15:10

thorncp


This is a Ruby question. You can meld this into whatever your view is trying to do.

@list.each_with_index do |item, idx|
  if((idx + 1) % 6 == 0)
    # Poop out the div
  end
  # Do whatever needs to be done on each iteration here.
end
like image 27
jdl Avatar answered Oct 05 '22 15:10

jdl