首页 > 解决方案 > 多个连接轨道混乱

问题描述

我有以下

**User** model
has_many orders class_name: "Order", foreign_key: "buyer_id"


**Order** model
has_many :items, class_name: "OrderItem"


**OrderItem** model
belongs_to :orderable, -> { with_deleted }, polymorphic: true

所以一个User有很多Orders,每个Order包含很多OrderItems,并且他们有一个与 product_id 相关的“orderable_id”

我正在尝试返回未购买特定商品的用户的用户 ID 列表

目前,我有

User.joins(:orders => :items).where("orders.status = 'success'").where("order_items.orderable_id != ?", product_id).pluck(:id)

不幸的是,它还不够深入。

如果 OrderItem 包含有问题的 product_id,它会成功丢弃该 OrderItem,但如果任何 OrderItem 包含有问题的 product_id,我需要完全丢弃用户

只是有点过头了

标签: mysqlruby-on-railsjoinactiverecord

解决方案


你可以尝试这样的事情:

user_who_purchased_ids = User.joins(orders: :items).where("orders.status = 'success'").where("order_items.orderable_id = ?", product_id).pluck(&:id)
users_who_did_not_purchase = User.where('id not in ?', user_who_purchased_ids)

推荐阅读