Прежде всего, это действительно зависит от того, хотите ли вы использовать подход чистого Ареля или использовать SQL хорошо. Первый вариант рекомендуется только в том случае, если вы намереваетесь создать библиотеку, но не нужен, если вы создаете приложение, в котором, на самом деле, маловероятно, что вы меняете свою СУБД по ходу процесса (и если вы это делаете, меняете несколько ручные запросы, вероятно, будут наименьшей из ваших проблем).
При условии использования SQL все в порядке, самое простое решение, которое должно работать практически во всех базах данных:
Order.where("(SELECT COUNT(*) FROM line_items WHERE line_items.order_id = orders.id AND line_items.discount_applied IS NULL) = 0")
Это также должен работать почти везде (и имеет немного больше Arel и меньше ручного SQL):
Order.left_joins(:line_items).where(line_items: { discount_applied: nil }).group("orders.id").having("COUNT(line_items.id) = 0")
В зависимости от вашей конкретной СУБД c (точнее: соответствующего оптимизатора запросов), один или другой может быть более производительным.
Надеюсь, это поможет.