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.* を追加すると、group 句に id を追加する必要があるため、time_worked の集計が失われます。

time_logs を含む 1 つのインスタンス var と、集計データを含む 1 つのインスタンス変数を用意する必要があります。

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

次に、ビューで、各 time_log の正しい合計を抜き出すことができます。ただし、特定の time_log をそれに相当する集計とどのように関連付けることができるかについては明確ではありません。

于 2013-08-23T05:59:33.493 に答える