如何操纵数组索引

时间:2016-05-31 19:53:37

标签: ruby-on-rails arrays activerecord

给出ActiveRecord::Relation马拉松参与者的实例及其各自的完成时间。如何确定在同一时间完成的任何两个或更多参与者的位置(即第一,第二,第三)?例如:

  

@runners = Runners.where(maranthon_year_id:2016,location:' ask')。order(finish_time :: asc)

通常,我会在视图中迭代这样:

  <% count = 0 %>
  <% if @runners.each do |runner| %>
   <tr>
    <td><%= runner.id %></td>
    <td><%= runner.name %></td>
    <td><%= runner.finish_time %></td>
    <td><%= (count += 1).ordinalize %></td>
   </tr>
    <% end.empty? %>
   <tr>
   <td colspan="4"> No Record Found</td>
   </tr>
  <% end %>

但如果两个或更多用户在准确时间完成,则上述操作无效。

这是所需的输出:

enter image description here

请注意,Eyal的职位是4th(不是3rd),因为两位参与者排在第二位。

2 个答案:

答案 0 :(得分:0)

这应该可以解决问题:

<% count = 0 %>
<% @runners.each do |runner| %>
  <td>runner.id</td>
  <td>runner.name</td>
  <td>runner.finish_time</td>
  <% if runner.finish_time == @runners[count].finish_time %>
    <td><%= count.ordinalize %></td>
    <% count += 1 %>
  <% else %>
     <td><%= (count += 1).ordinalize %></td>
  <% end %>
<% end %>

答案 1 :(得分:0)

@Ilya对结果分组有一个好主意,但该解决方案不会跳过示例中的第3位。我们需要另一个变量来跟踪地点。

@media screen and (max-width:1000px) {
  p {font-size: 300%!important;}
}