Ruby on rails 使用Rails进行计数

Ruby on rails 使用Rails进行计数,ruby-on-rails,count,rails-activerecord,Ruby On Rails,Count,Rails Activerecord,使用Usage.group:song_id,我可以在我的应用程序中获取任何特定歌曲的所有用法。使用Usage.group:song\u id.count,我可以得到类似{song\u id=>Usage\u count…}的散列 但是,我如何生成该计数的计数?i、 例如: [ used_once: number_of_songs_used_once, used_twice: number_of_songs_used_twice, used_thrice: number_of_song

使用Usage.group:song_id,我可以在我的应用程序中获取任何特定歌曲的所有用法。使用Usage.group:song\u id.count,我可以得到类似{song\u id=>Usage\u count…}的散列

但是,我如何生成该计数的计数?i、 例如:

[
  used_once: number_of_songs_used_once,
  used_twice: number_of_songs_used_twice,
  used_thrice: number_of_songs_used_thrice,
  etc.
]

好的,所以我真的希望输出看起来像{1=>14,2=>6,3=>2,4=>1}。

可以在散列上使用inject

song_values = Usage.group(:song_id).count.values

times_used = song_values.inject({}) do |used, count|
  if used[count].nil?
    used[count] = 1
  else
    used[count] += 1
  end
  used
end
如果希望if/else为一行,可以使用三元运算符

used[count].nil? ? used[count] = 1 : used[count] += 1

这只是在歌曲使用率计数上循环,构建一个哈希,其中键是歌曲使用的次数,更新每个计数的值,虽然没有解释得特别清楚,但我希望您能理解。

谢谢,我曾想过使用散列,但我想知道是否有SQL/ActiveRecord方法可以做到这一点。为什么要使用downvote?。。如果你不同意,请写评论