# Looping: break every x times

**URL:** <https://www.ruby-forum.com/t/looping-break-every-x-times/79648>\
**Category:** Ruby\
**Created:** [December 17, 2006, 5:56pm UTC](https://www.ruby-forum.com/t/looping-break-every-x-times/79648 "2006-12-17T17:56:34Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [December 17, 2006, 5:56pm UTC](https://www.ruby-forum.com/t/looping-break-every-x-times/79648/1 "2006-12-17T17:56:34Z")

</div>

I have a bunch of pictures to display on a page and I want to do 4 per  
row. This code works fine (inserting a   
 every 4th picture):

```
    <% i = 1 %>
    <% for photo in @photos do -%>
      <a href="/photos/show/<%=photo.id%>"><img

```

src="/photos/thumb/\<%=photo.id%\>"/\>  
\<% if (i.modulo(4) == 0) %\>  
  
  
\<% end %\>  
\<% i = i+1%\>  
\<% end %\>

but I was wondering if there is a more elegant way to do this. Thanks.

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [December 17, 2006, 6:04pm UTC](https://www.ruby-forum.com/t/looping-break-every-x-times/79648/2 "2006-12-17T18:04:36Z")

</div>

That looks like eRb or Ruby on Rails or something but couldn’t you just  
do:

\<% @photos.each\_with\_index do |photo, i| %\>  
[![](https://www.ruby-forum.com/photos/thumb/<%=photo.id%>)](https://www.ruby-forum.com/photos/show/<%=photo.id%>)  
\<% if (i % 4).zero? %\>  
  
  
\<% end %\>  
\<%end%\>

To get each\_with\_index you must require ‘enumerator’ but you could do  
Array#each\_index and then instead of photo.id you have photos[i].id. Of  
course, this all assumes that photos is an array.

Dan

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [December 17, 2006, 7:32pm UTC](https://www.ruby-forum.com/t/looping-break-every-x-times/79648/3 "2006-12-17T19:32:57Z")

</div>

Sounds like you’re looking for each\_slice:

[http://www.ruby-doc.org/core/classes/Enumerable.html#M003178](http://www.ruby-doc.org/core/classes/Enumerable.html#M003178)

- James M.

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [December 17, 2006, 9:35pm UTC](https://www.ruby-forum.com/t/looping-break-every-x-times/79648/4 "2006-12-17T21:35:10Z")

</div>

On Mon, 2006-12-18 at 02:04 +0900, Daniel F. wrote:

> To get each\_with\_index you must require ‘enumerator’ but you could do  
> Array#each\_index and then instead of photo.id you have photos[i].id.

You don’t need to require enumerator to get #each\_with\_index, at least  
not in 1.8.5.

Cheers,  
Daniel

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [December 17, 2006, 6:54pm UTC](https://www.ruby-forum.com/t/looping-break-every-x-times/79648/5 "2006-12-17T18:54:46Z")

</div>

Thanks Daniel, that’s what I was looking for.
