0

我有一个带有属性部门和点的用户模型。我按部门对用户进行了分组,并按每个部门包含的点数对它们进行了排序,如下所示在我的主页/索引视图中:

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

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

4

2 回答 2

0

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

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

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

于 2012-09-07T06:47:43.957 回答
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}
于 2012-09-07T06:59:08.580 回答