O
includes
O método do AREL escolherá entre duas estratégias para fazer a consulta, uma das quais simplesmente faz duas consultas distintas e a outra faz um INNER JOIN. Em ambos os casos os produtos serão distintos. Você tem que fazer manualmente uma junção externa direita:
Product.joins('RIGHT JOIN categories ON categories.product_id = products.id').where(categories: { id: @my_product.categories.pluck(:id) } )
adiciona também
.preload(:categories)
se você quiser manter o carregamento antecipado das categorias.