Метод класса в модели для получения данных на заданную дату
Я создаю приложение для отслеживания вызовов, как способ изучения 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