已经查看了this视频非常有用。但实际上我不想只是几个月的团队。我也希望将它们与条件分组。所以我有;
MyModel.where("state = 'A'").all.group_by { |q| q.created_at.beginning_of_month }.count
但它给了我所有记录,其中“A”中的状态并非当前月份。我错过了什么吗?
感谢。
答案 0 :(得分:0)
您可以获得本月创建的state = 'A'
记录:
MyModel.where(['state = ? AND ? <= created_at AND created_at <= ?',
'A', Date.today.beginning_of_month, Date.today.end_of_month])
将count
应用于该查询,您将获得此类记录的数量。
如果你需要每月记录数量,你可以这样做(不是最有效的方式):
records = MyModel.where("state = 'A'").all
result = records.each_with_object(Hash.new { |h, k| h[k] = 0 }) do |record, hash|
hash[record.created_at.beginning_of_month] += 1
end
您可能需要了解Hash#new
如何使用块以及Enumerable#each_with_object
执行的操作。
每月计算记录的更有效方法是使用纯SQL按月对行进行分组,并将计数应用于该行。在这种情况下,如果你有一个很大的表,你将不会从数据库中获取记录本身会更快。