模型中的类方法在给定日期获取数据

时间:2012-10-11 04:03:42

标签: ruby-on-rails railscasts

我正在构建一个呼叫跟踪应用程序,作为学习Rails和Twilio的一种方式。现在,我正在尝试按照Ryan Bates的教程创建一个图表,向用户显示他们每天的电话数。

该模型的工作原理如下 - >电话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 个答案:

答案 0 :(得分:1)

简单地说:

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

假设您有一个Phone对象,并且您想知道在某一天发生了多少与该对象相关的调用。此方法应为实例方法,而不是方法。我不明白为什么如果你想知道特定日的特定手机有多少次通话,它会是一种类方法。< / p>

如果您使用by_star,则上述代码为:

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

答案 1 :(得分:1)

尝试以下

  def self.total_on(date)
    query = select("calls.id").where("date(calls_at) = ?", date).joins(:calls)
    query.count
  end