Rails where 与 joins 的一个小问题请教

QueXuQ · 2021年03月18日 · 最后由 lithium4010 回复于 2021年03月26日 · 488 次阅读

我写了一个这样的 SQL:

Order.joins(:products).where.not(products: { user: current_user }, user: current_user)

意思就是,我想找一批订单,但是这个订单不是当前用户创建的,并且这个订单下的产品也不是用户创建的。
这个代码这么一看是没有问题的,但是运行起来我就发现我哪里写的有问题。

因为这样写的话,如果一个 Order 下是没有 products 的,它也不会显示。

而我希望的是,Order 下没有 Products 的,显示,同时如果 Order 里有 Products 的话,那么就需要判断 user 这个,不知道这个 SQL 应该怎么写比较好呢?

试试用 includes 代替 joins,前者是 left outer join 后者是 inner join

试试 left_joins

Order.left_outer_joins(:products).where("products.id is null or products.user_id = ?", current_user.id)
zhaoyshine 回复

原来 Rails 5 增加了这个方法。👍

我要看所有其他人的订单?这种需求有点奇怪

需要 登录 后方可回复, 如果你还没有账号请 注册新账号