Dit is een andere benadering.
Offer.find_by_sql("SELECT * FROM offers o WHERE NOT EXISTS (SELECT * FROM products WHERE products.offer_id = o.id AND service_id IS NULL)")
Zelfs het idee van een ORM is dat je de SQL abstraheert, in dit soort complexe query's denk ik dat het beter is om de eenvoudigste oplossing te kiezen en de query niet nog ingewikkelder te maken.