我正在尝试执行一个查询,当前用户只能看到他/她尚未查看过的项目。审查或多或少是通过/未通过系统,而不是书面声明。在用户交互创建评论之前,不存在任何评论。
项目具有用户外键,而评论具有用户和项目外键。
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 | item | %> <%end%>循环。
以前的尝试:
@feed = Project.where("id NOT IN (SELECT DISTINCT(project_id) FROM reviews)").where("#{current_user.id} IN (SELECT user_id FROM reviews)")
我要实现的输出是查询所有项目记录,这些记录不属于当前用户并且没有被当前用户查看。
编辑:
经过更多的摆弄和研究,我想我找到了解决方案。
@feed = Project.where("NOT EXISTS (SELECT * FROM reviews WHERE reviews.project_id = projects.id AND reviews.user_id = #{current_user.id})")
我在两个测试帐户中尝试过,一个带有评论,一个没有评论。两者的正确计数都回来了,对于是否合适的查询,我仍然持开放态度。