includes
методът на AREL ще избира между две стратегии за извършване на заявката, едната от които просто прави две отделни заявки, а другата прави INNER JOIN. И в двата случая продуктите ще бъдат различни.
Трябва да направите ръчно дясно външно съединение:
Product.joins('RIGHT JOIN categories ON categories.product_id = products.id').where(categories: { id: @my_product.categories.pluck(:id) } )
добавя също .preload(:categories)
ако искате да запазите нетърпеливото зареждане на категориите.