ruby-on-rails - 如何编写一个 Rails 查询来按月返回计数?

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

采用标准 NewsFeed 模型 (id,user_id)

如何在 NewsFeed 模型中查询每月的记录数,然后排除一些 user_id?

结果将产生:

Jan - 313
Feb - 3131
Mar - 44444
etc...

是否有一种简单的方法可以使用 Rails 来执行此操作,或者您需要为每个月编写一个查询吗?

谢谢

最佳答案

在 Rails 4 中,执行此操作的方法是在模型上创建范围。

class NewsFeed < ActiveRecord::Base
  scope :group_by_month,   -> { group("date_trunc('month', created_at) ") }
  scope :exclude_user_ids, -> (ids) { where("user_id is not in (?)",ids) }
end

然后你可以这样调用它:

@counts = NewsFeed.exclude_user_ids(['1','2']).group_by_month.count

这会给你:

{2014-01-01 00:00:00 UTC=>313, 2014-02-01 00:00:00 UTC=>3131}

然后输出(haml):

- @counts.each do |m|
  = "Month: #{m[0].strftime("%b")}, Count: #{m[1]}"

这会导致:

Month: Jan, Count: 313
Month: Feb, Count: 3131

关于ruby-on-rails - 如何编写一个 Rails 查询来按月返回计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10608765/

相关文章:

ruby-on-rails - 使用Devise和Rails Admin对特定路线进行身份验证

android - 在不触发 InvalidAuthenticityToken 的情况下将图像从 Android 客户端发布到 Rails 服务器

javascript - 错误率: jquery file upload on submit form button

ruby-on-rails - Ruby/Rails - 在新窗口中从 Controller 打开 URL

ruby-on-rails - 调用 arerel 操作的动态方法

ruby-on-rails - Rails 2.3.x - 这个 ActiveRecord 作用域是如何工作的?

ruby-on-rails - 当我覆盖它的邮件程序时,Devise 正在发送带有空白正文的电子邮件

ruby - Rails 将整数评估为 bool 值

ruby-on-rails - Ruby .each 效率

ruby-on-rails - 如何在 Rails 中使用带有自定义 setter 方法的 update_attributes?