Добавление пользовательских метаданных для определенных подсчетов с помощью API Rails REST

Для конечной точки индекса time_trackings мне нужно вернуть конкретную информацию о метаданных, помимо 'page-items', 'total-pages' и т. Д., Предоставленных pagy (жемчужина разбивки на страницы). Я хочу иметь возможность возвращать total_confirmed, total_running и т. Д. Я использовал ransack для подсчета, и это выглядит так

      def set_time_trackings_metadata(records)
  total_unconfirmed = records.ransack("confirmed_true" => 0).result.count.to_s
  total_confirmed = records.ransack("confirmed_true" => 1).result.count.to_s
  total_running = records.ransack("running" => 1).result.count.to_s

  @time_tracking_metadata = { total_unconfirmed: total_unconfirmed, total_confirmed: total_confirmed,
                              total_running: total_running  }
end

Это показывает правильные метаданные. Вот пример ответа

      {
"data": [
    {
        "id": "15",
        "type": "time_tracking",
        "attributes": {
            "starts_at": "2021-02-18T05:16:00+01:00",
            "ends_at": "2021-02-18T14:00:00+01:00",
            "confirmed": false,
            ...
"meta": {
    "current_page": "1",
    "page_items": "20",
    "total_pages": "1",
    "total_count": "4",
    "total_unconfirmed": "4",
    "total_confirmed": "0",
    "total_running": "3"
 }
}

Теперь проблема в том, что это решение совсем не идеально, особенно когда индекс содержит сотни или тысячи записей, что является обычным явлением для варианта использования, которым я занимаюсь. Есть ли способ лучше рассчитать эти параметры?

0 ответов

Другие вопросы по тегам