Активный запрос на эффективную запись для воссоздания - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть система голосования.

По сути, у меня есть вызов со многими предметами. У каждого предмета испытания есть много фотографий, и люди должны голосовать за эти фотографии. Поэтому я записываю эти голоса, которые принадлежат фотографии. Каждый голос имеет отпечаток пальца, который идентифицирует избирателя. Таким образом, с помощью отпечатка пальца я могу получить все голоса пользователя. Теперь: я должен получить идентификаторы в виде массива предметов, за которые пользователь уже проголосовал.

Я передаю два параметра: отпечаток пальца, который я использую, чтобы вернуть массив голосов, и запрос.

У меня есть эти модели

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

Чтобы получить фотографии вызова с голосованием. Но теперь из этих фотографий мне нужно также получить предметы для испытаний ...

Есть подсказка?

1 Ответ

0 голосов
/ 11 апреля 2019

Я, вероятно, не получил то, что вы хотите.Разве это не так?Учитывая votes_ids

ChallengeItem.joins(photos: :votes).
    where(challenge_id: challenge_id, votes: {id: votes_ids}).
    distinct.pluck(:id)

Это то, что я получаю из этого предложения I need to build the most efficient query that return me the challenge items id array from a vote array

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...