【问题标题】:Rails Scope count record by day of the weekRails Scope 计数记录按星期几
【发布时间】:2014-09-26 12:48:35
【问题描述】:

我有一个 Rails 3.2.14 应用程序,我在其中使用仪表板提供基本统计信息,例如当天的通话次数等。我有多个范围来计算今天、年初至今和上一年至今的电话。我想添加一种方法来按本周 M、T、W、Th、Fri、Sat、Sun 的星期几计算通话。

到目前为止,我编写了一个简单的范围,它传递一个日期参数并查询transfer_date,如下所示:

call.rb

scope :by_day,  lambda { |date| where('transfer_date BETWEEN ? AND ?', date.beginning_of_day, date.end_of_day) }

所以,如果我这样做:Call.by_day(1.day.ago) 我会在 24 小时内收到昨天所有来电的数组。

在我看来,我可以简单地做@call.by_day(1.day.ago).count @call.by_day(2.day.ago).count 等。但我想限制本周的数字,否则它是一个 7 天的运行计数。我想在每个输出上面我可以做<%= 1.day.ago.strftime("%m/%d/%y") %> <%= 2.day.ago.strftime("%m/%d/%y") %> 等。但这似乎不是很干净。

总而言之,我想获取一周的快照,按星期几计算,每个都带有日期标签(星期一、星期二等)或日期标签(2014 年 9 月 22 日、9 日/ 23/14)等

是否有人对如何干净利落地执行此操作以及最小化视图加载查询有任何建议?

【问题讨论】:

    标签: ruby-on-rails-3 activerecord scope rails-activerecord


    【解决方案1】:

    我有一个名为 by_star 的宝石。

    以下是自述文件中的一些示例:

    Post.by_year(2013)                           # all posts in 2013
    Post.before(Date.today)                      # all posts for before today
    Post.yesterday                               # all posts in 2013
    Post.between_times(Time.zone.now - 3.hours,  # all posts in last 3 hours
                      Time.zone.now)
    @post.next                                   # next post after a given post
    

    按一天获取帖子,

    Post.by_day(1.day.ago)
    

    【讨论】:

    • 这真的很酷,我喜欢。唯一需要注意的是,我试图根据名为transfer_date 的列而不是created_at 来计算我的Call 模型。有没有办法将transfer_date 作为参数传递给基于它的计数?我们根据transfer_date 进行统计,因为我们想知道哪些电话在什么日期到达。例如,今天可能已经创建了呼叫,但 transfer_date 可能是明天。因此,在我们的场景中,使用您的 gem 调用 Call.today.count 可能会产生偏差的数字。想法?
    • 太棒了,我会加载 gem 并尝试一下。如果我使用这个 gem,我将不得不摆脱我用来计算调用次数的 today 范围,但没什么大不了的。
    猜你喜欢
    • 2016-09-04
    • 2020-09-09
    • 1970-01-01
    • 2015-05-13
    • 2022-08-10
    • 1970-01-01
    • 2016-06-27
    • 2019-04-22
    • 1970-01-01
    相关资源
    最近更新 更多