Запрос с помощью объединения в цепочки?

#ruby-on-rails

#ruby-on-rails

Вопрос:

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

Существует модель команды, в которой есть пользователи и списки.

Команда

 has_many :lists
has_many :users
 

И между пользователями и списками также существует связь «многие ко многим», которая представляет, к каким спискам пользователь имеет доступ.

 list
has_many :accesses
has_many :users, through: :accesses
belongs_to :team

user
has_many :accesses
has_many :lists, through: :accesses
belongs_to :team

access
belongs_to :list
belongs_to :user
 

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

Я пробовал это, но это не кажется правильным:

 List.joins(:team).joins(:user).where.not(users: { id: @user.id })
 

У меня также есть метод с именем team.lists, который позволяет захватывать все списки команды, но joins с ним не работает.

Ответ №1:

Как насчет того, чтобы немного разделить это?

 users_lists_ids = @user.lists.pluck(:id)
@user.team.lists.where('id NOT IN (?)', users_lists_ids)