Скажите, у меня есть следующие таблицы и отношения:
class Book
has_many :book_genres
end
class Genre
has_many :book_genres
end
class BookGenre
belongs_to :book
belongs_to :genre
end
Если бы я хотел тольконайдите книги, которые имеют два конкретных идентификатора жанра (13005 и 9190),
Я думал, что мог бы сделать что-то вроде:
Book.where(book_genres: {genre_id: [13005, 9190]})
Но возвращаются книги, которыеимеют либо Жанры ID 13005, либо 9190.
Я также подумал, что, возможно, я мог бы отфильтровать его, выполнив что-то вроде:
Book.where(book_genres: {genre_id: [13005]}).where(book_genres: {genre_id: [9190]})
Но это тоже не работает.
Как найти только книги, содержащие жанры с обоими идентификаторами?
Примечания:
Из этого сообщения (https://stackoverflow.com/a/3416838/1778314), Я пытался сделать это:
Book.joins(:book_genres).where(book_genres: { genre_id: [13005,9190]}).group("books.id").having("count(book_genres.id) = #{[13005, 9190].count}")
Но это тоже не работает (возвращает оба набора).
Кроме того, есть аналогичная публикация с использованием рецептов и ингредиентов без рабочего решения: Ruby On Rails 5, запрос activerecord, где идентификаторы ассоциации моделей включают ВСЕ идентификаторы в массиве