私は、地元のレストランが毎日働いた時間を追跡するのに役立つアプリケーションに取り組んでいます。ユーザーは、各シフトの終わりに「チェックアウト」と呼ばれるモデルを通じてデータを入力します。has_many :through => employment
雇用モデルが結合テーブルである に関連付けられている従業員を選択します。確かにCheckout
、紛らわしい用語ですが、それはレストランが使用したかった DSL です。
特定の日に各従業員が働いた時間をどのようにグループ化しますか? その従業員のデータベースには、その日の 2 つのチェックアウト (1 つは昼食から、もう 1 つは夕食から) が存在する可能性があります。
各従業員が特定の日に働いた時間のリストを作成したいと考えています。その日からの時間は、データベース内の個別のチェックアウトに保存される可能性があります。
Today's Date
Joe Employee
Hours worked: 12
Jill Employee
Hours worked: 4
etc.
チェックアウト モデルの属性ではなく、従業員モデルによる関連付けである場合、チェックアウトを従業員別にグループ化するにはどうすればよいですか? 基本的に、レポートヘルパーで次のようなことをしようとしています:
def checkouts_today
current_user.checkouts.where( :date => Date.today )
end
def employee_hours_today
checkouts_today.where( :employment => Employee.find_by(id: params[:id]) ).sum(:hours)
end
しかし、 has_many :through 関連付けで動作させることはできません。従業員ごとの合計時間ではなく、その日からのすべての時間を合計する方法しかわかりません。
関連ファイルは次のとおりです。
- models/checkout.rb - https://gist.github.com/leemcalilly/a2a0578adaf8841d4d5e
- models/employee.rb - https://gist.github.com/leemcalilly/2df5e7fb7db0ac0f602c
models/employment.rb - https://gist.github.com/leemcalilly/d3a028b6effe5f245b2a
helpers/reports_helper.rb - https://gist.github.com/leemcalilly/e2503188bb26df64ad20
ビュー/payroll_processing.html.erb - https://gist.github.com/leemcalilly/868b1272128e75dc60d0
db/schema.rb - https://gist.github.com/leemcalilly/f9ce764d16161b7b3017
更新: 各従業員をループして、これでチェックアウトを表示できます。
<% @employees.each do |employee| %>
<% if employee.checkouts.present? %>
<p><%= employee.full_name %></p>
<% employee.checkouts.each do |checkout| %>
<%= checkout.date %>
<%= checkout.shift %>
<%= checkout.hours %>
<% end %>
<% end %>
<% end %>
しかし、時間を合計して表示し、1 つのブロックで返す方法がわかりません。各従業員の名前で、毎日の各チェックアウトを返します。また、この種のロジックはビューに含めるべきではないようです。