Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将group_by与RoR中的where语句一起使用_Ruby On Rails_Ruby_Activerecord_Group By - Fatal编程技术网

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