首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails:用户消息发送者来自的国家/地区的饼图

Rails:用户消息发送者来自的国家/地区的饼图
EN

Stack Overflow用户
提问于 2013-06-22 04:14:19
回答 2查看 102关注 0票数 0

我想向AMcharts饼图提供数据,这些数据可以细分用户消息的发送者的来源。

输出应如下所示:

代码语言:javascript
复制
"[{country: \"US\", usercount: 25},{country: \"UK\", usercount: 15},{country: \"Italy\", usercount: 10},{country: \"Poland\", usercount: 2},{country: \"Japan\", usercount: 5}]"

因此,我需要使用current_user.messages,获取每个发件人的发件人,找出他们来自哪些国家,计算每个国家有多少人,然后将国家名称和用户计数编译成一个数组,然后我可以遍历该数组,将其转换为以下字符串格式...呼。欢迎光临。

请求的关联架构:

代码语言:javascript
复制
class User < ActiveRecord::Base
  belongs_to :country
  has_many :messages
end

class Message < ActiveRecord::Base
  belongs_to :user
end

class Country < ActiveRecord::Base
  attr_accessible :name, #[...]

  has_many :users

  #table is pre-populated with a list of all the world's countries
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-22 06:35:16

代码语言:javascript
复制
user_ids = current_user.messages.collect(&:user_id)


country_count_hash = {}
users_ids.each do |user_id|
  country = User.find(user_id).country
  next unless country
  country_count_hash[country.name] ||= 0
  country_count_hash[country.name] += 1 
end

count_array = []
country_count_hash.each do |key, value|
  count_array << {:country => key, :usercount => value}
end

count_array.to_json

这应该就行了。请注意,这是未经测试的。但它至少应该给你一个概念。如果你有很多用户,用sql做这件事会是个好主意。

票数 1
EN

Stack Overflow用户

发布于 2013-06-22 05:24:38

我可能会使用部分sql语句和子查询来实现这一点,因为在纯活动记录中这是一个开销很大的操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17243585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档