効率的ではありませんが、あなたの問題を解決するかもしれないと思いました:
orders = Order.includes(:line_items).select do |order|
order.line_items.all? { |line_item| line_item.discount_applied.nil? }
end
更新:
すべてのラインアイテムに割引がない注文を見つける代わりに、割引が適用されたラインアイテムを持つすべての注文を出力結果から除外できます。これはwhere句内のサブクエリで実行できます。
# Find all ids of orders which have line items with a discount applied:
excluded_ids = LineItem.select(:order_id)
.where.not(discount_applied: nil)
.distinct.map(&:order_id)
# exclude those ids from all orders:
Order.where.not(id: excluded_ids)
これらを1つの検索メソッドで組み合わせることができます。
Order.where.not(id: LineItem
.select(:order_id)
.where.not(discount_applied: nil))
お役に立てれば