У меня есть система голосования.
По сути, у меня есть вызов со многими предметами. У каждого предмета испытания есть много фотографий, и люди должны голосовать за эти фотографии. Поэтому я записываю эти голоса, которые принадлежат фотографии. Каждый голос имеет отпечаток пальца, который идентифицирует избирателя. Таким образом, с помощью отпечатка пальца я могу получить все голоса пользователя.
Теперь: я должен получить идентификаторы в виде массива предметов, за которые пользователь уже проголосовал.
Я передаю два параметра: отпечаток пальца, который я использую, чтобы вернуть массив голосов, и запрос.
У меня есть эти модели
class Challenge < ApplicationRecord
has_many :challenge_items
has_many :photos, :through => :challenge_items
belongs_to :season
end
class ChallengeItem < ApplicationRecord
belongs_to :challenge
has_many :photos
has_many :votes, :through => :photos
end
class Photo < ApplicationRecord
belongs_to :challenge_item
has_many :votes
end
class Vote < ApplicationRecord
belongs_to :photo
end
Голосование принадлежит фотографии, которая относится к конкурсу.
Мне нужно создать наиболее эффективный запрос, который вернет мне массив идентификаторов элементов вызова из массива голосования.
Ассоциация принадлежит_ не может иметь: сквозную опцию
Теперь я использую
challenge_photo_ids = Challenge.find(params["challenge"]).photos.map(&:id)
чтобы получить идентификаторы фотографий вызова
get_already_voted = Vote.where(voter_string: params["voter_string"]).map(&:photo_id)
Чтобы получить идентификаторы фотографий из голосования
@already_voted = challenge_photo_ids & get_already_voted
Чтобы получить фотографии вызова с голосованием.
Но теперь из этих фотографий мне нужно также получить предметы для испытаний ...
Есть подсказка?