Позволяет отображать схему Ruby с двумя ресурсами (пользователь и книги), которые имеют ассоциацию HABTM.
Когда я выполняю фильтрацию на основе этой ассоциации, независимо от того, есть у пользователя книга или нет, Ruby ведет себянемного странно:
2.5.3 :007 > Contact.includes(:books).count
(4.7ms) SELECT COUNT(*) FROM "contacts"
=> 36880
Это нормально, потому что возвращает общее значение контактов с любой ассоциацией книг.
2.5.3 :010 > Contact.includes(:books).where(books: {"id":[1,2] }).count
(34.0ms) SELECT COUNT(DISTINCT "contacts"."id") FROM "contacts" LEFT OUTER JOIN "contacts_books" ON "contacts_books"."contact_id" = "contacts"."id" LEFT OUTER JOIN "books" ON "books"."id" = "contacts_books"."book_id" WHERE "books"."id" IN (?, ?) [["id", 1], ["id", 2]]
=> 24864
Что тоже хорошо, так как возвращает все контакты, которыеиметь книгу с идентификатором 1 или 2.
2.5.3 :011 > Contact.includes(:books).where.not(books: {"id":[1,2] }).count
(13.0ms) SELECT COUNT(DISTINCT "contacts"."id") FROM "contacts" LEFT OUTER JOIN "contacts_books" ON "contacts_books"."contact_id" = "contacts"."id" LEFT OUTER JOIN "books" ON "books"."id" = "contacts_books"."book_id" WHERE "books"."id" NOT IN (?, ?) [["id", 1], ["id", 2]]
=> 0
Теперь эта часть не имеет смысла, потому что она должна быть полной - #associations, поэтому 36880 - 24864, оставляя мне 12016 записей, а не 0.
Или что мне не хватает?
Rails 5.2.2 ruby 2.5.3p105 (ревизия 2018-10-18 65156) [x86_64-darwin17]