1

我发现了一种非常丑陋的方式来做我需要的事情(目前只是在 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] sum(:twitter_count)” - 我认为这是与.map 有关,但我不知道为什么。

4

2 回答 2

2

在第一行更改=-

- @user.articles.group(:publication).map do |p|
于 2013-05-04T11:58:29.817 回答
0

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

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

文档#map:_

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

a = [ "a", "b", "c", "d" ]
a.map { |x| x + "!" }   #=> ["a!", "b!", "c!", "d!"]
a                       #=> ["a", "b", "c", "d"]
于 2013-05-04T11:57:28.317 回答