0

私は、地元のレストランが毎日働いた時間を追跡するのに役立つアプリケーションに取り組んでいます。ユーザーは、各シフトの終わりに「チェックアウト」と呼ばれるモデルを通じてデータを入力します。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 関連付けで動作させることはできません。従業員ごとの合計時間ではなく、その日からのすべての時間を合計する方法しかわかりません。

関連ファイルは次のとおりです。

更新: 各従業員をループして、これでチェックアウトを表示できます。

<% @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 つのブロックで返す方法がわかりません。各従業員の名前で、毎日の各チェックアウトを返します。また、この種のロジックはビューに含めるべきではないようです。

4

1 に答える 1