Есть несколько способов сделать это:
1) Использовать left_outer_joins
с количеством, указанным ниже:
scope :full_paid, -> {
left_outer_joins(:products)
.select("purchase_id, COUNT(CASE WHEN products.status= 4 THEN 1 ELSE 0 END) as paid")
.having("paid > 0")
.group("products.purchase_id")
}
2) Аналогично @ John Skiles Skinner ответьте, но с некоторыми изменениями, добавьте группу , чтобы получить уникальные покупки со стороны БД :
Product.select(:purchase_id).where(status: 4).group(:purchase_id)
Я думаю, что может бытьа также другие способы