1

:joins または :includes を使用してアイテムをクエリする方法はありますか?また、同じクエリで、対応する関係を持たない結果を返す方法はありますか?

現在のサンプルクエリ

Company.find(1).users.includes(:billing_statuses).where('billing_statuses.expires < ?', Time.now)

これは、billing_statuses の有効期限が切れているすべてのユーザーを返す必要がありますが、最終的な目標は、すべての「請求されていない」ユーザーを取得することであり、これには :billing_statuses 関係をまだ持っていないユーザーが含まれます。

これを 1 つのクエリに結合する方法はありますか?

私が検討した別の方法は、会社のすべてのユーザーを取得してから、請求書の有効期限が切れていないユーザーを差し引くことです。しかし、それは最適な解決策ではないと感じています。

ありがとう!

4

1 に答える 1

1

これを試して:

User.where(company_id: 1).joins("LEFT OUTER JOIN billing_statuses ON billing_statuses.user_id = users.id").where("billing_statuses.expires < ? or billing_statuses.id IS NULL", Time.now)

于 2012-05-29T04:59:26.337 に答える