求和不同的列并返回图表的数组

时间:2013-05-02 20:40:57

标签: ruby-on-rails ruby

我有一个文章模型(属于用户),并且包含facebook_shareslinkedin_sharestwitter_shares的数量。我想为每个用户的文章总结一下facebook / linkedin / twitter共享的数量,并将它们返回到我可以放入图表的数组中。

这就是我目前正在执行此操作的方式,按照此Railcast将结果返回到=content_tag

 = content_tag :div, "", id: "shares-chart", data: {shares: 
   [
     {y: 'Tweets', a: @user.articles.sum(:twitter_shares)},
     {y: 'Facebook', a: @user.articles.sum(:facebook_shares)},
     {y: 'LinkedIn', a: @user.articles.sum(:linkedin_shares)}
   ]
  }

但这似乎是一种丑陋的方式。使用.map有更好的方法吗?这是一个我无法弄清楚如何应用于列而不是记录的函数。

1 个答案:

答案 0 :(得分:0)

也许你想要这个:

User模型中:

def construct_data
  [{"Tweets" => :twitter_shares}, {"Facebook" => :facebook_shares}, {"LinkedIn" => :linkedin_shares}].map do |h| 
    {y: h.keys.first, a: @user.articles.sum(h.values.first)}
  end 
end

在您的控制器操作中:

@chart_data = @user.construct_data

在您看来:

 = content_tag :div, "", id: "shares-chart", data: {shares: @chart_data}