0

我正在开发一个帮助当地餐馆跟踪每天工作时间的应用程序。用户在每个班次结束时通过称为“结帐”的模型输入数据。他们选择与 a 关联的员工has_many :through => employment,其中雇佣模型是一个连接表。当然,Checkout这是一个令人困惑的术语,但这就是餐厅想要使用的 DSL。

您如何将每位员工在某一天的工作时间分组?当天,该员工的数据库中可能有 2 次结账——一次来自午餐,一次来自晚餐。

我想创建每个员工在给定日期工作的小时数列表,当他们从那天起的小时数可能存储在数据库中的单独结帐中。

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 %>

但是,我不知道如何汇总他们的时间并在一个块中显示和返回。它返回每个员工姓名下每天的每个结帐。这种逻辑似乎也不应该出现在视图中。

4

1 回答 1

1

第一种方法

checkout.rb中:

scope :checkouts_today, -> {where(date: Date.today)}

在您的视图或控制器中:

employee.checkouts.checkouts_today.sum(:hours)

第二种方法

员工.rb

has_many :today_checkouts, class_name: "Checkout", conditions: {date: Date.today}

在您的视图或控制器中:

employee.today_checkouts.sum(:hours)

不确定第二种方法是否可行,因为您有一个连接表来获取 and 之间的Employee关系Checkout。正如我们在聊天中讨论的那样,您可以删除连接表,在您的情况下,我看不到您需要它的位置,给您的应用程序更多空间。

于 2013-08-02T21:34:12.113 回答