Rails:组成一个重复的部分

And*_*rew 3 ruby-on-rails partial ruby-on-rails-3.1

假设我有一堆项目,我想迭代它们.我可能会_item偏爱渲染这些.

我可以像这样呈现这些:

= render :partial=>'item', :collection => @items, :as => :item
Run Code Online (Sandbox Code Playgroud)

对于这个例子,假设部分是非常简单的,就像这样(在haml中):

.item= item.name
Run Code Online (Sandbox Code Playgroud)

但是,我希望这些项目按行分组,因此标记最终会像这样:

<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>
Run Code Online (Sandbox Code Playgroud)

我并不总是提前知道会有多少项目/我需要多少行.

你怎么能创建一个局部的,或者包装一个局部的,所以它会像这样在组中渲染?

Dyl*_*kow 8

您可以使用Enumerable each_slice一次对这5个进行分组并将它们显示在一行中:

<% @items.each_slice(5) do |items_for_row| %>
  <div class="item_row">
    <%= render :partial => "item", :collection => items_for_row, :as => :item %>
  </div>
<% end %>
Run Code Online (Sandbox Code Playgroud)