我有一个 Postgres 表,其中用户可以有许多支付订阅,并且支付订阅是活动的或非活动的,这通过支付订阅表上的 activate_at 和 inactivated_at 日期字段显示。我现在想找到所有没有有效支付订阅的用户。
无需任何付费订阅即可轻松找到所有用户
User.joins("LEFT JOIN payment_subscriptions ON (payment_subscriptions.user_id = users.id)").where("payment_subscriptions.id IS NULL")
我还想找到所有只有非活动订阅的用户。如果我使用与上面相同的模式,我会发现所有用户在某个时候都取消了他们的订阅,但不能保证他们也没有活跃的订阅。
User.joins("LEFT JOIN payment_subscriptions ON (payment_subscriptions.user_id = users.id)").where("payment_subscriptions.inactivated_at IS NOT NULL")
如何从我的表中获取没有订阅或没有活动订阅的用户?