#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
также указать значения.