User.rb
has_many :votes
has_many :photos
Photo.rb
has_many :votes
belongs_to :user
Vote.rb
belongs_to :user
belongs_to :photo
我想列出对一张照片投票的用户。但是这个列表必须包含用户对照片投票的次数。例如,当我访问url photos/5/statistics时,必须有如下列表:
1) User1 voted 30 times
2) User432 voted 15 times
3) User43 voted 12 times
使用group_by是一种方法
例如:Photo.first.votes.group_by(&:user).each do |user, votes|
puts "User #{user.id} voted #{votes.count} times"
end
基本上,你在Photo模型内操作:
class Photo < ActiveRecord::Base
...
def voting_list
votes.joins(:user).group(:user).count
end
...
这会得到一个OrderedHash,如下所示:
{<user_object_1> => 14, <user_object_2> => 33, ...}
如果您想知道单个用户为特定照片投票的次数,您可以这样做:
user = User.find_by_some_option
photo = user.photos.first
photo.votes.find{|vote| vote.user == user}.count