按列分组并在Rails中汇总多个其他列

我找到了一种非常难看的方式来做我需要的东西(目前只在Rails视图中,我稍后会移动它),这基本上是为了查找特定用户的所有文章,将它们分组到各自的出版物中,以及然后将用户为该出版物添加的所有文章的共享计数相加。

……但它并不漂亮。 如果有更好的方法,有人可以提供建议吗?

=@user.articles.group(:publication).map do |p| =p.publication =@user.articles.where("publication = ?", p.publication).sum(:twitter_count) =@user.articles.where("publication = ?", p.publication).sum(:facebook_count) =@user.articles.where("publication = ?", p.publication).sum(:linkedin_count) 

这给出了输出(例如)NYT 12 18 14 BBC 45 46 47 CNN 75 54 78,这正是我所需要的。

然而,目前,它还在最后输出一些额外的东西 – “[5,5,5,5,5,5,5,5,5,5,5]总和(:twitter_count)” – 我认为这是与.map有关,但我不知道为什么。

在第一行改变=

 - @user.articles.group(:publication).map do |p| 

你是对的。 .map正在创建新数组。

替换=-在第一行。 (学分归到juanpastas ,我不记得HAML)

#map 文档 :

创建一个包含块返回的值的新数组。

 a = [ "a", "b", "c", "d" ] a.map { |x| x + "!" } #=> ["a!", "b!", "c!", "d!"] a #=> ["a", "b", "c", "d"]