Rails:突出显示循环内的最后一条记录

时间:2015-12-07 12:42:48

标签: ruby-on-rails

我正在尝试突出循环中的最后一个条目。但是下面的代码为每个表行指定了id =“highlight”:(

  <% @sales.order("created_at desc").each do |sale| %>
    <tr <% if sale.created_at = Sale.last %>id="highlight"<% end%> >
      <td><%= sale.user.name %></td>
      <td><%= sale.product %></td>
  ....

有什么想法吗?谢谢你们!

3 个答案:

答案 0 :(得分:3)

if sale.created_at = Sale.last

应该是

if sale.created_at == Sale.last.created_at

或者,我猜以下会更好,因为它消除了额外的查询Sale.last

<% @sales.order("created_at desc").each_with_index do |sale, idx| %>
  <tr <% if idx == @sales.length - 1 %>id="highlight"<% end%> >
    <td><%= sale.user.name %></td>
    <td><%= sale.product %></td>
....

HTH

答案 1 :(得分:2)

要获取行数(没有额外的数据库查询),您可以使用:  @ sales.length

然后使用each_with_index进行循环:

<% @sales.order("created_at desc").each_with_index do |sale, i| %>
  <tr <% if @sales.length == i + 1 %>id="highlight"<% end%> >
    <td><%= sale.user.name %></td>
    <td><%= sale.product %></td>
  </tr>
<% end %>

答案 2 :(得分:1)

检查您使用=标志的方式。

请注意,相等(==)与赋值(=)不同。

您需要的是此处的等号(==)。这样:

<% if sale.created_at == Sale.last %>id="highlight"<% end%>

而不是:

<% if sale.created_at = Sale.last %>id="highlight"<% end%>
你正在做的事。