Перечислите данные, которые не связаны с текущим объектом activerecord - PullRequest
0 голосов
/ 04 февраля 2019
class Group < ApplicationRecord
  has_many :group_tests

  has_many :tests, through: :group_tests
end

class GroupTest < ApplicationRecord
  belongs_to :group
  belongs_to :test
end

class Test < ApplicationRecord
  has_many :group_tests
  has_many :groups, through: :group_tests
end

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

Допустим, у нас есть 6 тестов (Тест 1, Тест 2, Тест 4 ....) и 3 Группы (Группа 1, Группа 2, Группа 3)

Мы добавляем 3 теста (Тест 1, Тест 2, Тест 3) в Группу 1.

Теперь я хочу получить только те тесты, которых нет в группе 1, которыеТест 4, Тест 5, Тест 6

group = Group.find(id) // lets say group 1
// find tests that are not added to this group 

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Сначала вы найдете тестовые идентификаторы, которые принадлежат определенной группе, а затем используете , а не , или вы также можете использовать запрос @Vasilisa с помощью объединений.

group_test_ids = group.tests.ids #test ids which belongs to group

tests = Test.where.not(id: group_test_ids) # tests which not contain that group

Один вкладыш

tests = Test.where.not(id: group.tests.ids)
0 голосов
/ 04 февраля 2019

Вы можете написать это в одну строку.

Test.left_outer_joins(:groups).where.not(groups: {id: id})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...