Trước hết, điều này thực sự phụ thuộc vào việc bạn có muốn sử dụng cách tiếp cận Arel thuần túy hay không nếu sử dụng SQL là tốt. Trước đây, IMO chỉ được khuyến khích nếu bạn có ý định xây dựng thư viện nhưng không cần thiết nếu bạn đang xây dựng một ứng dụng trong thực tế, rất khó có khả năng bạn thay đổi DBMS của mình trên đường đi (và nếu bạn làm vậy, thay đổi một số ít truy vấn thủ công có thể sẽ là ít rắc rối nhất của bạn).
Giả sử sử dụng SQL là tốt, giải pháp đơn giản nhất có thể hoạt động trên hầu hết các cơ sở dữ liệu là:
Order.where("(SELECT COUNT(*) FROM line_items WHERE line_items.order_id = orders.id AND line_items.discount_applied IS NULL) = 0")
Điều này cũng sẽ hoạt động khá nhiều ở mọi nơi (và có thêm một chút Arel và ít SQL thủ công hơn):
Order.left_joins(:line_items).where(line_items: { discount_applied: nil }).group("orders.id").having("COUNT(line_items.id) = 0")
Tùy thuộc vào DBMS cụ thể của bạn (cụ thể hơn: trình tối ưu hóa truy vấn tương ứng của nó), cái này hay cái kia có thể hiệu quả hơn.
Mong rằng sẽ giúp.