Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails: Make a repeating partial in groups

Let's say I have a bunch of items and I want to iterate through them. I might have an _item partial to render these.

I could render these like so:

= render :partial=>'item', :collection => @items, :as => :item

For this example, let's say the partial is something really simple, like so (in haml):

.item= item.name

However, I'd like these items to be grouped in rows, so the markup ends up being like so:

<div class="item_row">
  <div class="item">Item Name</div>
  <div class="item">Item Name</div>
  <div class="item">Item Name</div>
  <div class="item">Item Name</div>
  <div class="item">Item Name</div>
</div>
<div class="item_row">
  <div class="item">Item Name</div>
  <div class="item">Item Name</div>
  <div class="item">Item Name</div>
  <div class="item">Item Name</div>
  <div class="item">Item Name</div>
</div>
<div class="item_row">
  <div class="item">Item Name</div>
  <div class="item">Item Name</div>
  <div class="item">Item Name</div>
  <div class="item">Item Name</div>
  <div class="item">Item Name</div>
</div>

I don't always know ahead of time how many items there will be / how many rows I need.

How could you create a partial, or wrap a partial, so it would render in groups like this?

like image 585
Andrew Avatar asked Dec 10 '25 18:12

Andrew


1 Answers

You could use Enumerable's each_slice to group these 5 at a time and display them in a row:

<% @items.each_slice(5) do |items_for_row| %>
  <div class="item_row">
    <%= render :partial => "item", :collection => items_for_row, :as => :item %>
  </div>
<% end %>
like image 101
Dylan Markow Avatar answered Dec 12 '25 07:12

Dylan Markow



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!