Rails 3获取数组中哈希的索引位置

时间:2012-09-07 06:29:16

标签: arrays ruby-on-rails-3 indexing

我有一个带有属性部门和点的用户模型。我按部门对用户进行了分组,并按照它们包含的点数对每个部门进行了分类,如下面的home / index视图所示:

Accounting 158
Animal Science 98
Kinesiology 58 

我只想获取数组中每个哈希元素的索引,以便我可以这样做:

1. Accounting 158
2. Animal Science 98
3. Kinesiology 58 

这是我home_controller中的代码:

class HomeController < ApplicationController  
def index
@users = User.find(:all)
@dep_users = @users.group_by { |u| u.department}
end

在我的家/索引视图中,我有这段代码:

    <% @dep_users.sort.each do |department, users| %>
    <% @p = Array.new() %>

    <%= department %>
    <% for user in users %>
    <% @p << user.points %>
    <% end %>
    <%= @p.inject(:+) %>
    <% end %>
    <% end %>

我已尝试在@dep_users上使用each_with_index:

@dep_users.sort.each_with_index do |department, users, index|

但我一直收到这个错误:

undefined method 'each' for 0:FixNum when I do that

如何获取数组中每个哈希元素的索引?

2 个答案:

答案 0 :(得分:0)

我认为,在你的观点中移动这么多逻辑是个坏主意。更好的方法是定义新方法,它将在模型中返回排序数组[[department1, points1], [department2, points2]]。然后从控制器中调用它来创建实例变量。这个变量在您的视图中使用这样的代码

<ol>
  <% @p.each do |item| %>
    <li><%= item[0] + '&nbsp;' + item[1] %></li>
  <% end %>
</ol>

让html将数字放在列表的每个项目之前。

答案 1 :(得分:0)

用于排序哈希使用Hash [hash_name.sort]导致它返回一个哈希值。 hash_name.sort返回一个数组。

1.9.2-p320 :077 > a
=> {:sameer=>40, :rohan=>25, :prasad=>26} 

> Hash[a.sort_by{|name, age| age}]
=> {:rohan=>25, :prasad=>26, :sameer=>40} 
> Hash[a.sort_by{|name, age| name}]
=> {:prasad=>26, :rohan=>25, :sameer=>40}