我的Activity模型有一个循环
<% @activities.each do |activity| %>
<div>
<div class="cell">
<%= image_tag(activity.image) %>
</div>
<div class="cell">
<h4><%= activity.title %></h4>
<p><%= activity.description %></p>
<span><%= activity.distance %></span>
</div>
</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
我想创建一个zig-zag效果,所以我需要为每个偶数活动重新安排HTML,所以标记将如下所示:
<div>
<div class="cell">
<h4><%= activity.title %></h4>
<p><%= activity.description %></p>
<span><%= activity.distance %></span>
</div>
<div class="cell">
<%= image_tag(activity.image) %>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
有没有办法用if语句做到这一点?像这样的东西:
<% if activity.odd? %>
<% @activities.each do |activity| %>
<div>
<div class="cell">
<%= image_tag(activity.image) %>
</div>
<div class="cell">
<h4><%= activity.title %></h4>
<p><%= activity.description %></p>
<span><%= activity.distance %></span>
</div>
</div>
<% end %>
<% else %>
<% @activities.each do |activity| %>
<div>
<div class="cell">
<h4><%= activity.title %></h4>
<p><%= activity.description %></p>
<span><%= activity.distance %></span>
</div>
<div class="cell">
<%= image_tag(activity.image) %>
</div>
</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
mea*_*gar 14
有几种方法可以做到这一点.
第一种也是最好的方法是使用CSS的nth-child选择器来做这件事,假设它可以纯粹通过CSS实现你想要的效果.使用nth-child(odd)或nth-child(even),如使用CSS的备用表行颜色中所述?
如果您正在迭代使用的集合.each,您可以添加.with_index并检查索引是奇数还是偶数:
<% @activities.each.with_index do |activity, index| %>
<% if index.odd? %>
...
<% else %>
...
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
请注意,默认情况下,索引从零开始,因此您的第一个元素将被视为"偶数".您可以将起始索引传递给1,with_index如果您希望交替开始奇数:
<% @activities.each.with_index(1) do |activity, index| %>
Run Code Online (Sandbox Code Playgroud)使用的另一种方法with_index是使用Rails的cycle帮助程序,每次调用它时,它会"神奇地"返回循环中的下一个参数:
<% @activities.each do |activity| %>
<% if cycle('odd', 'even') == 'odd' %>
...
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)另请注意,这是重构的绝佳机会.你应该将两个重复使用的celldiv 提炼成它们自己的部分并按你想要的顺序渲染它们:
<% if index.odd? %>
<%= render h4_part %>
<%= render img_part %>
<% else %>
<% render img_part %>
<% render h4_part %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4051 次 |
| 最近记录: |