Метод класса в модели для получения данных на заданную дату

Я создаю приложение для отслеживания вызовов, как способ изучения Rails и Twilio. Прямо сейчас я пытаюсь следовать руководству Райана Бейтса, чтобы создать график, который показывает пользователям количество телефонных звонков, которые они совершают в день.

Модель работает так - > Телефон has_many звонки

Что я хотел бы сделать, это создать метод класса, который позволил бы мне сделать что-то вроде

phone.calls.total_on (дата)

Это покажет общее количество звонков по конкретному телефону на конкретную дату.

Вот код в настоящее время в моей модели телефона

  def self.total_on(date)
    where("date(calls_at) = ?", date).sum( self.calls.count )
  end

Что, вероятно, не так с кодом - это sum (self.calls.count). Это будет считать все звонки, независимо от даты, если я в правильном направлении.

Как бы я занялся созданием метода класса, который бы подсчитывал вызовы на определенную дату?

Спасибо, что остались со мной! Ваши мысли очень ценятся.

2 ответа

Решение

Просто это:

def total_on(date)
  self.calls.where("placed_at >= ? AND placed_at <= ?", date.beginning_of_day, date.end_of_day).count
end

Предполагая, что у вас есть Phone объект, и вы хотите знать, сколько связанных вызовов для этого объекта произошло в данный день. Этот метод должен быть методом экземпляра, а не методом класса. Я не понимаю, почему это был бы метод класса, если вы хотите увидеть, сколько звонков было сделано для определенного телефона в определенный день.

Если вы используете by_star, приведенный выше код будет следующим:

def total_on(date)
  self.calls.by_day(date).count
end

Попробуйте следующее

  def self.total_on(date)
    query = select("calls.id").where("date(calls_at) = ?", date).joins(:calls)
    query.count
  end
Другие вопросы по тегам