从不确定的散列长度中生成行号

时间:2013-10-01 14:05:03

标签: ruby-on-rails ruby

我在rails视图中有类似以下的代码。存储数据的哈希长度根据页面而变化。我希望能够为每一行编号。我知道我可以像这样得到哈希的长度<%= hash.postdata.length %>每个方法生成的每一行的编号是什么?请注意,我最终可能不会使用<tr><td> s

<% hash.postdata.try(:each) do |key, value| %>
      <% if value.present? %>
       <tr>
       <td><%= has.post.user.name %></td><td><%= simple_format(key) %></td>
       </tr>             
       <% end %>   
 <%- end -%> 

1 个答案:

答案 0 :(得分:4)

您可以使用each_with_index代替,这将为您提供从零开始的索引:

<% hash.postdata.try(:each_with_index) do |(key, value), index| %>
  ...
<% end %>

所以第一个循环index将为0,然后是1,等等。所以你可以使用<%= index + 1 %>之类的东西输出它。

请注意,如果您只想计算具有当前value的行,则当前代码可能会导致跳过行号。相反,最好先过滤哈希并摆脱if条件:

<% hash.postdata.select{ |k,v| v.present? }.each_with_index do |(key, value), index| %>