私は他の多くのルビーハッシュ/ソートの投稿を見てきましたが、これを下げることができないようです. 特定の期間に完了した作業の ActiveRecord セットをループして構築された「給与計算」ハッシュがあります。開始日と開始日を選択する日付ピッカーがあり、作業時間の最も多いユーザーによって出力を注文したいと思います。
schedules = Schedule.where(:employer => employer_id).includes(:employee).order('date ASC')
@payrolls = Hash.new()
schedules.each do |p|
payrolls[p.employee.first_name] ||= {}
payrolls[p.employee.first_name]['money_earned'] = payrolls[p.employee.first_name]['money_earned'].to_f + p.money_earned.to_f
payrolls[p.employee.first_name]['hours_worked'] = payrolls[p.employee.first_name]['hours_worked'].to_f + p.hours_worked.to_f
end
@payrolls.sort_by { |k, v| v[:money_earned] }
これは、ハッシュを構築するための PHP のようなものかもしれませんが、5 年間の PHP 開発の後の最初の主要な Rails プロジェクトです。それが機能する限りは問題ありませんが、より良い代替手段にノーとは言いません!
そして、純粋にその瞬間をテストするための私の見解:
<% @payrolls.each do |key, value| %>
<div class="payroll_employee">
<%= key %> <%= value['money_earned'] %> <%= value['hours_worked'] %>
</div>
<% end %>
現在、並べ替えはまったく効果がありません。何を変更しても同じ順序で出力され、Ruby のハッシュの主要な (そしておそらく明らかな) 部分が欠けていると思い始めています。あらゆる提案に感謝します。
出力用に編集: (id、名前、時間、獲得)
1 | Tom Jones | 10.51 | 105.1
3 | Peter Griffen | 7.5 | 75.0
2 | Joseph Rogers | 6.2 | 62.0
4 | Weee Joss | 14.0 | 140.0