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

ハッシュをソートするには、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 に答える
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 に答える