ruby on rails - many to many count


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

相关内容

  • 没有找到相关文章

最新更新