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

最初の行で=byに変更します。-

- @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 に答える