Почему бы вам не аннулировать покупки при удалении продукта?
class Product
has_many :purchases, :dependent => :nullify
end
Таким образом, все, что вам нужно сделать, это запросить покупки, где product_id равен нулю. Надеюсь, это поможет!
EDIT:
Если вы используете этот подход сейчас, чтобы обновить старые записи и сделать их согласованными, вы должны сделать что-то вроде этого:
Purchase.where.not(product_id: Product.select(:id).distinct).update_all(product_id: nil)
Так вот так теперь должно работать