这是我的阵列:
finalcount = Vote.where(:month => month, :year => year, :vote_id => vote.id).count
我想使用group_by
(我认为?)按user_id
(每次投票都有)对投票进行分组,然后返回票数最高的user_id
。
我有什么想法可以做到这一点吗?
答案 0 :(得分:5)
您是否尝试过group
方法?
finalcount = Vote.where(:month => month, :year => year, :vote_id => vote.id).group(:user_id).count
将为您提供Hash
,其中密钥为user_id
,值为count
。然后,您可以在此结果上调用max
以获取包含user_id
和count
的双元素数组。
以下是我方便的应用程序示例,我使用计算结果查找正确的模型实例并从中读取属性:
ruby-1.9.2-p136 :001 > ExternalPost.group(:service_id).count
=> {18=>1, 19=>1, 21=>4}
ruby-1.9.2-p136 :002 > ExternalPost.group(:service_id).count.max
=> [21, 4]
ruby-1.9.2-p136 :003 > Service.find(ExternalPost.group(:service_id).count.max.first).user.first
=> "Brandon"
答案 1 :(得分:0)
如果您的表结构如下:
vote_id
user_id
...
这应该返回一个数组,其中第一个元素是具有最多投票的user_id,第二个元素是该user_id的计数。
Vote.group(:user_id).count.max{|a, b| a.last <=> b.last}
答案 2 :(得分:0)
我认为你真正想要的是:
Vote.select("votes.user_id, count(votes.id)").
where(:month => month, :year => year, :id => vote.id).
group("votes.user_id").
order("count(votes.id) DESC").
limit(1)
这将获取他们拥有的user_id和投票数,但只返回投票最多的投票。
为什么您的来电有:vote_id => vote.id
?您的投票模型是否真的有一个名为vote_id
的列,它是否与正常id
不同?