0

我想为 AMcharts 饼图提供数据,这些数据可以细分用户消息的发件人来自何处。

输出应如下所示:

"[{country: \"US\", usercount: 25},{country: \"UK\", usercount: 15},{country: \"Italy\", usercount: 10},{country: \"Poland\", usercount: 2},{country: \"Japan\", usercount: 5}]"

所以我需要获取 current_user.messages,获取每个人的发件人,找出他们来自哪些国家,计算每个国家有多少人,然后编译国家名称和用户计数到一个数组中,然后我可以循环遍历, 变成这种字符串格式……唷。欢迎帮助。

根据要求的关联模式:

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
4

2 回答 2

1
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 中执行此操作将是一个好主意。

于 2013-06-21T22:35:15.710 回答
0

我可能会使用部分 sql 语句和子查询来执行此操作,因为它在纯活动记录中的操作有点昂贵。

于 2013-06-21T21:24:38.453 回答