У меня есть две модели, обе с отношением has_and_belongs_to_many
.
class Movie < ApplicationRecord
has_and_belongs_to_many :genres
end
class Genre < ApplicationRecord
has_and_belongs_to_many :movies
end
Так, например, на странице индекса фильма я хочу иметь возможность фильтрации по жанру. Для формы фильтра у меня есть поле выбора жанров, которое при отправке отправляет массив идентификаторов.
Как мне найти фильмы, которые соответствуют ВСЕМ этим идентификаторам в массиве, а не просто любому из идентификаторов, использующих Active Record? Если пользователь выбирает, например, «Ужасы» и «Комедии», ему следует отфильтровать фильмы, которые одновременно являются «Ужасами» и «Комедиями», а не просто фильмы ужасов или комедии.
ids = params[:genres]
Movie.includes(:genres).where(genres: {id: ids})
Приведенный выше пример находит любой фильм ужасов или комедии.