【问题标题】:Grouping by one column and summing multiple other columns in Rails在 Rails 中按一列分组并对多个其他列求和
【发布时间】:2013-05-04 19:58:29
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    在第一行将= 更改为-

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

    【讨论】:

    • 谢谢 - 这清除了最后的额外内容。但我也在寻找让整个街区更清洁的建议——如果你有任何建议,我们会很欢迎!
    【解决方案2】:

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

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

    Docs#map

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

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

    【讨论】:

    • 感谢您的评论以及您的评论 - 我赞成他的回答。不过,也欢迎任何使整体代码块更好的建议。
    猜你喜欢
    • 2012-01-03
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多