Новичок в ROR, вопрос на консоли и доступ к данным в таблицах с несколькими предложениями where

#ruby-on-rails #ruby #ruby-on-rails-6

Вопрос:

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

У меня есть следующие таблицы

таблица пользователей (все пользователи и компания, в которой они работают): идентификатор пользователя company_id

Таблица клиентов (список клиентов и компании, клиентом которой они являются): идентификатор компании

Сопоставление таблицы User_to_client (таблица, с которой пользователи работают на каком клиенте): идентификатор пользователя идентификатор клиента

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

я пытался создать консоль запроса is rails, что-то вроде: Клиент.где(идентификатор агентства: 1), сопоставление пользователей.where.not(идентификатор пользователя: 2) на основе того, что я видел в других примерах. Но это не работает. Я уверен, что делаю что-то совершенно неправильное. Был бы признателен за любую помощь или указание мне в правильном направлении.

Спасибо!!!!

Ответ №1:

Я предполагаю, что у вас есть связь MappingUserToClient с вашей Client моделью. Т. Е.

 class Client < ApplicationRecord
  has_many :mapping_user_to_clients
end
 

Затем вы можете запустить следующее, и оно вернет вам всех клиентов agency_id 1 и тех, которые не назначены user_id 2

 Client.joins(:mapping_user_to_clients)
  .where(agent_id: 1)
  .where.not('mapping_user_to_clients.user_id': 2)
 

Комментарии:

1. Привет, Кулкинг, спасибо, что нашли время ответить на мой вопрос. У меня действительно была связь с клиентской моделью. Я проверил код, который вы опубликовали. и получил обратно нулевые результаты. Есть один результат, который должен был вернуться. У меня есть 4 тестовых клиента в базе данных… три клиента назначены агентству (идентификатор:1), и из этих трех клиентов два из них назначены пользователю (идентификатор:2). Запуск кода должен был вернуть третью компанию.

2. Вот что вернула консоль: Client.joins(:mapping_user_to_clients). где(идентификатор агентства: 1).где.нет(«сопоставление идентификатора пользователя с идентификатором пользователя»: 2) Загрузка клиента (0,3 мс)

3. ВЫБЕРИТЕ «клиенты».* ИЗ «клиентов» ВНУТРЕННЕЕ СОЕДИНЕНИЕ «сопоставление_user_to_clients» НА «сопоставление_user_to_clients».»идентификатор клиента» = «клиенты».»идентификатор» ГДЕ «клиенты».»идентификатор агентства» = ? И «сопоставление_user_to_clients».»идентификатор пользователя» != ? /* загрузка для проверки */ ОГРАНИЧЕНИЕ ? [[«идентификатор агентства», 1], [«идентификатор пользователя», 2], [«ОГРАНИЧЕНИЕ», 11]] => #><ActiveRecord::Отношение []>

4. Извините за задержку, но не могли бы вы опубликовать данные из ваших таблиц в своем вопросе? Пожалуйста, не забудьте NULL также указать значения.