0

我有一堆对象,我按照它们发生的那一天对它们进行了分组。

scope :grouped_by_user_with_total_time, lambda {
  group(:user_id, :day).select('user_id, SUM(time_worked) AS time_total, day, editable, approvable, accepted, comments')
}

我也有一些改变可编辑、可批准和接受​​的方法。但是现在由于它们已分组,因此在尝试批准分组对象时出现此错误。

找不到没有 ID 的 TimeLog

我的approve方法:

def approve
  @time_logs = []
  t = TimeLog.find(params[:time_logs])

  if t.instance_of?(Array)
    @time_logs = t
  else
    @time_logs << t
  end
end

我必须进行哪些更改才能使这些方法适用于所有分组在一起的工时记录?

    <% @time_logss.each do |timelog| %>
      <% if timelog.user_id != current_user.id %>
      <tr>
        <!--<td><%# check_box_tag 'accept' %></td>-->
        <td><%= timelog.id_name %></td>
        <td><%= timelog.day.strftime("%B %d, %Y") %></td>
        <td><%= timelog.time_total %></td>
        <td><%= timelog.state %></td>
            <% if timelog.state == "Submitted" %>
        <td><%= link_to "Approve", approve_time_sheets_path(time_sheets: timelog), method: :put %></td>
4

1 回答 1

0

您正在尝试将聚合函数与访问唯一数据的需要结合起来。当您使用 .select('') 时,您是在告诉 AR 将哪些字段填充到对象中(即使是数据库中不直接存在的属性)。

如果添加 time_logs.*,您将丢失 time_worked 上的聚合,因为您将被迫将 id 添加到 group 子句。

您需要做的是 1 个带有 time_logs 的实例 var 和一个带有聚合数据的实例:

@time_logs = TimeLog.all
@time_totals = TimeLog.grouped_by_user_with_total_time

然后,在视图中,您可以为每个 time_log 提取正确的总数。虽然,我不清楚你将如何将特定的 time_log 与它的聚合等效项联系起来。

于 2013-08-23T05:59:33.493 回答