многие ко многим - PullRequest
       1

многие ко многим

3 голосов
/ 03 мая 2011
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 фотографии / 5 / статистика Там должен быть список, как показано ниже:

1) User1   voted 30 times
2) User432 voted 15 times
3) User43  voted 12 times

Любая помощь будет оценена.

Ответы [ 3 ]

5 голосов
/ 03 мая 2011

Использование group_by было бы одним из способов сделать это

Например:

Photo.first.votes.group_by(&:user).each do |user, votes| 
  puts "User #{user.id} voted #{votes.count} times"
end
1 голос
/ 03 мая 2011

Итак, в основном вы работаете из модели Photo:

class Photo < ActiveRecord::Base
  ...
  def voting_list
    votes.joins(:user).group(:user).count
  end
  ...

Это даст вам OrderedHash, как показано ниже:

{<user_object_1> => 14, <user_object_2> => 33, ...}
0 голосов
/ 03 мая 2011

Если вы хотите узнать, сколько раз один пользователь голосовал за определенную фотографию, вы можете сделать что-то вроде:

user = User.find_by_some_option
photo = user.photos.first
photo.votes.find{|vote| vote.user == user}.count
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...