我有一个带有属性部门和点的用户模型。我按部门对用户进行了分组,并按照它们包含的点数对每个部门进行了分类,如下面的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
如何获取数组中每个哈希元素的索引?
答案 0 :(得分:0)
我认为,在你的观点中移动这么多逻辑是个坏主意。更好的方法是定义新方法,它将在模型中返回排序数组[[department1, points1], [department2, points2]]
。然后从控制器中调用它来创建实例变量。这个变量在您的视图中使用这样的代码
<ol>
<% @p.each do |item| %>
<li><%= item[0] + ' ' + 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}