Я бы сделал это в 2 этапа:
Сначала я бы определил соотношение has_many :through
между моделями без каких-либо условий.
Во-вторых, я бы добавил «область видимости», которая определяет условие «где».
В частности, я бы сделал что-то вроде:
class User < ActiveRecord::Base
has_many :video_votes
has_many :votes, :through=>:video_votes
def self.voted_users
self.video_votes.voted
end
end
class VideoVote
def self.voted
where("value = ?", 1)
end
end
class Video
has_many :video_votes
has_many :users, :through=>:video_votes
end
Тогда вы могли бы получить пользователей, которые проголосовали, используя:
VideoVote.voted.collect(&:user).uniq
, которые, я полагаю, вернутмассив всех пользователей, которые проголосовали.Это не тот код, который вы бы использовали - это просто фрагменты кода, но идея та же.