ruby-on-rails 按周/月等分组& ActiveRecord?

lx0bsm1f  于 2023-03-13  发布在  Ruby
关注(0)|答案(7)|浏览(179)

我正在做一些静态计算,一个用户执行了很多操作,比如说发表评论,我希望能够显示他们在过去一个月每周发表了多少评论,或者过去一年每月发表了多少评论。
有没有什么方法可以用activerecord这样分组?我最好的方法是简单地手动完成这一操作--根据我自己的标准迭代记录求和?

class User < ActiveRecord::Base
  has_many :comments
end

class Comments < ActiveRecord::Base
  belongs_to :user
end

@user.comments(:all).map {|c| ...do my calculations here...}

还是有更好的办法
谢谢!奥伦

ttvkxqim

ttvkxqim1#

在Postgres中,您可以:

@user.comments.group("DATE_TRUNC('month', created_at)").count

以获得:

{"2012-08-01 00:00:00"=>152, "2012-07-01 00:00:00"=>57, "2012-09-01 00:00:00"=>132}

它接受从“微秒”到“千分之一”的值进行分组:http://www.postgresql.org/docs/8.1/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC

py49o6xq

py49o6xq2#

在这种情况下,对我来说最好的解决方案是要么直接用SQL,要么使用Ruby group_by函数:

@user.all.group_by{ |u| u.created_at.beginning_of_month }
a64a0gku

a64a0gku3#

这是更精确的版本

@user.comments.group("year(created_at)").group("month(created_at)").count

还有

@user.comments.group("year(created_at)", "month(created_at)").count
hpcdzsge

hpcdzsge4#

我的猜测是这样的:

@user.comments.count(:group => "year(created_at),month(created_at)")

干码、ymmv

wfauudbj

wfauudbj5#

使用分组依据(_B)

@user.comments.group_by(&:week)

class User < ActiveRecord::Base
  def week
    some_attribute_like_date.strftime('%Y-%W')
  end
end

这将为您提供YYYY-WW格式的分组列表

ddhy6vgd

ddhy6vgd6#

查看has_activity插件。

bksxznpy

bksxznpy7#

查看组日期gem
https://github.com/ankane/groupdate
它有最近的提交,与postgresql一起工作,很容易与chart kick集成以实现快速制图,并与时区一起工作!!

相关问题