Dies ist ein weiterer Ansatz.
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)")
Auch wenn die Idee eines ORM darin besteht, dass Sie das SQL abstrahieren, denke ich, dass es bei dieser Art von komplexer Abfrage besser ist, die einfachste Lösung auszuwählen und die Abfrage nicht noch komplizierter zu machen.