在使用chartkick gem的应用中:
我有以下数据库表关系:
class User < ActiveRecord::Base
has_many :games
contains id, email
end
class Game < ActiveRecord::Base
has_many :levels
belongs_to :user
#contains id, user_id, name
accepts_nested_attributes_for :levels
end
class Level < ActiveRecord::Base
belongs_to :game
#contains id, score and game_id
end
如何绘制每位玩家获得的分数? 然后是每个游戏每个游戏获得的平均分数?
我想做类似的事情:
<%= column_chart Level.group(:user.email).sum(:score) %>
我成功了:
<%= column_chart Level.group(:game_id).sum(:score) %>
可以找到整个代码here
答案 0 :(得分:2)
“我如何绘制每位球员获得的分数?”
首先将此添加到用户:
has_many :levels, :through => :games
然后获得每位玩家的总得分:
User.includes(:levels).group(:email).sum(:score)
“然后是每个游戏每个游戏获得的平均分数?”
User.includes(:levels).group(:email, :game_id).average(:score)
这将返回一个哈希,其中元组(email,game_id)为关键,平均值为值。通过电子邮件分组只是为了能够在结果中获得一些用户身份识别,但应该有一种更好的方式来实现它。
答案 1 :(得分:0)
您可以使用包含
来加入表格arel = Level.includes(:user,:game)
然后根据需要使用适当的查询,
arel = arel.group('user.email')