Записи запросов Rails, где пользователь не просматривал через связанную модель - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь реализовать запрос, когда текущий пользователь видит только проекты, которые он / она не просматривал. Обзор является более или менее системой «сдал / не сдал», а не письменным заявлением. Отзыв не существует, пока пользователь не создаст его.

Проекты имеют внешний ключ пользователя, а обзоры имеют внешний ключ пользователя и проекта.

class User < ApplicationRecord
  has_many :projects, dependent: :destroy
  has_many :reviews, through: :projects, dependent: :destroy  
end

class Review < ApplicationRecord
  belongs_to :user
  belongs_to :project
end

class Project < ApplicationRecord
  belongs_to :user
  has_many :reviews, dependent: :destroy
end

Выходные данные отправляются в базовый элемент <% @ feed.each do | item | Цикл%> <% end%>.

Предыдущие попытки:

@feed = Project.where("id NOT IN (SELECT DISTINCT(project_id) FROM reviews)").where("#{current_user.id} IN (SELECT user_id FROM reviews)")

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

EDIT:

После долгих размышлений и исследований я думаю, что нашел решение.

@feed = Project.where("NOT EXISTS (SELECT * FROM reviews WHERE reviews.project_id = projects.id AND reviews.user_id = #{current_user.id})")

Я пробовал это сделать в двух тестовых аккаунтах, один с отзывами, а другой ни с одним Вернулось правильное количество для обоих, я все еще открыт для понимания того, подходит ли этот запрос.

...