jQn*_*oob 13 ruby ruby-on-rails
我想一次渲染我的项目列表3,以便它们以三行的形式输出.我目前正在使用
<div class="row">
<div class="three columns">
<% @items.each do |f|%>
<div class="item">
<%= f.content %>
</div>
<% end %>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
哪个输出所有规则在一个'行' -
<div class="row">
<div class="three columns">
<div class="item">
This is the content
</div>
<div class="item">
This is the content
</div>
<div class="item">
This is the content
</div>
<div class="item">
This is the content
</div>
<div class="item">
This is the content
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我希望能够做的是为返回的每三个项输出一行,所以 -
<div class="row">
<div class="three columns">
<div class="item">
This is the content
</div>
<div class="item">
This is the content
</div>
<div class="item">
This is the content
</div>
</div>
</div>
<div class="row">
<div class="three columns">
<div class="item">
This is the content
</div>
<div class="item">
This is the content
</div>
<div class="item">
This is the content
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
谢谢
Cad*_*ade 40
除了前面提到的each_slice,Rails还有一个in_groups_of方法,你可以这样使用:
<% @items.in_groups_of(3, false).each do |group| %>
<div class="row">
<div class="three columns">
<% group.each do |item| %>
<div class="item">
<%= item.content %>
</div>
<% end %>
</div>
</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
几乎相同each_slice,除了需要输出空白div的场景变得更加清晰如此:
<% @items.in_groups_of(3).each do |group| %>
<div class="row">
<div class="three columns">
<% group.each do |item| %>
<div class="item">
<%= item.content if item %>
</div>
<% end %>
</div>
</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
in_groups_of垫缺少在最后一组项目进行nil默认,所以它发出的最后几个迭代和if item检查将确保它不会通过调用炸毁content的nil.
in_groups 是另一个用于视图格式的有趣的.
MrY*_*iji 11
您可以使用each_slice方法:
<% @items.each_slice(3) do |array_of_3_items|%>
<div class="row">
<div class="three columns">
<% array_of_3_items.each do |item|%>
<div class="item">
<%= item.content %>
</div>
<% end %>
</div>
</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
附加说明:如果你想要最后一行3个div,即使最后一行只包含2个项目怎么办?(即@items是5个项目的列表,最后一行应该只输出2个div).
解决方案:
<% @items.each_slice(3) do |array_of_3_items|%>
<div class="row">
<div class="three columns">
<% array_of_3_items.each do |item|%>
<div class="item">
<%= item.content %>
</div>
<% end %>
<% (3 - array_of_3_items.length).times.each do |fake_div| %>
<div class="item empty">
</div>
<% end %>
</div>
</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7552 次 |
| 最近记录: |