ruby Rails7,尝试使用联接从项目列表中排除申请者

9bfwbjaz  于 2023-08-04  发布在  Ruby
关注(0)|答案(1)|浏览(94)

我有一个项目模型...

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

字符串
...一个用户模型...

class User < ApplicationRecord
  has_many :projects, dependent: :destroy
  has_many :applicants, dependent: :destroy
end


...和一个申请人模型,以多对多的方式连接它们。

class Applicant < ApplicationRecord
  belongs_to :project
  belongs_to :user
end


我将与申请人一起做其他事情,所以更喜欢保持这种结构。我也在为用户使用Devise。
我的问题是。我试图返回一个列表的项目其中两个条件发生。
1.项目列表不包括当前用户自己的项目。这是通过查询实现的:
@sugested_projects = Project.where.not(user_id:current_user.id)
1.然后,我想从该列表中排除用户尚未成为申请人的任何项目。我可以通过以下方式找到用户申请的位置:
Project.where.not(user_id:current_user.id).joins(:applicants).where(applicants:{ user_id:current_user.id })
但是我好像找不到
用户没有**申请的地方。我试过这个例子,但它不起作用:
Project.where.not(user_id:current_user.id).joins(:applicants).where.not(applicants:{ user_id:current_user.id })
有人能给我指个方向吗?

0vvn1miw

0vvn1miw1#

我将使用一个子查询来执行此操作,该子查询拒绝所有具有id的项目,而current_user具有applicant

Project
  .where.not(user: current_user)
  .where.not(id: current_user.applicants.select(:project_id))

字符串

相关问题