Ruby on rails 将group_by与RoR中的where语句一起使用
已经检查视频,这是非常有用的。但事实上,我不想只在几个月内就组队。我想把他们也分成一组。所以我有Ruby on rails 将group_by与RoR中的where语句一起使用,ruby-on-rails,ruby,activerecord,group-by,Ruby On Rails,Ruby,Activerecord,Group By,已经检查视频,这是非常有用的。但事实上,我不想只在几个月内就组队。我想把他们也分成一组。所以我有 MyModel.where("state = 'A'").all.group_by { |q| q.created_at.beginning_of_month }.count 但它给了我所有在“A”中注明的记录,而不是本月的具体记录。我错过什么了吗 谢谢。您可以获得本月创建的状态为“A”的记录,如下所示: MyModel.where(['state = ? AND ? <= created_
MyModel.where("state = 'A'").all.group_by { |q| q.created_at.beginning_of_month }.count
但它给了我所有在“A”中注明的记录,而不是本月的具体记录。我错过什么了吗
谢谢。您可以获得本月创建的状态为“A”的记录,如下所示:
MyModel.where(['state = ? AND ? <= created_at AND created_at <= ?',
'A', Date.today.beginning_of_month, Date.today.end_of_month])
您可能需要了解如何使用block以及它的作用
每月统计记录的更有效的方法是使用普通SQL按月对行进行分组,并对其应用计数。在这种情况下,您将不会从数据库中获取记录,如果您有一个相当大的表,那么数据库将更快。您将获取所有具有
state='a'
的记录,然后对它们进行分组。它生成一个散列,其中键是月份和值的开始,即在相应月份中创建的记录数组。如果将count
应用于此,则在创建state='a'
的记录时,您只需要几个不同的月份。你能更好地描述一下你想要得到的结果吗?啊,没有提到的计数是不好的。例如,我只想获取当月创建的记录计数,其中的状态为“A”。如果你只想对当月创建的state='A'
记录计数,为什么需要分组?您想获得每个月创建的记录数吗?我使用分组,因为将来可能需要每个月的统计数据。但是你能告诉我如何得到所有记录,包括当前月份和状态吗?谢谢你,现在解决了我的问题。但若我想得到所有关于这个记录的统计数据,我将如何做呢?我想这将是我在不久的将来的下一个问题:)。添加了每月获取统计数据的解决方案。
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