Mysql 多重连接

Mysql 多重连接,mysql,ruby-on-rails,join,activerecord,Mysql,Ruby On Rails,Join,Activerecord,我有以下几点 **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 }, polymorph

我有以下几点

**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
因此,一个用户有许多订单,每个订单包含许多订单项,并且他们有一个与产品id相关的“可订购id”

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

目前,我有

User.joins(:orders => :items).where("orders.status = 'success'").where("order_items.orderable_id != ?", product_id).pluck(:id)
不幸的是,它不够深入

如果OrderItem包含有问题的product\u id,它将成功放弃该OrderItem,但是如果任何OrderItem包含有问题的product\u id,我需要完全放弃该用户


这对我来说有点过头了

你可以试试这样的东西:

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)

您可以尝试以下方法:

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)

请注意,
order
在MySQL中是一个保留字。请注意,
order
在MySQL中是一个保留字。这将在适当的时候给您带来痛苦。当我尝试使用该数组时,我遇到一个无法引用数组的类型错误..-试着传递ID,我得到了一个语法error@BryanSpence请分享代码,也许它是其他东西,现在我没有改变任何东西-我有它,正如你上面提到的。当我在“id not in?”行中包含购买id的用户时,我得到TypeError-无法引用数组所以使用user.where.not(id:users\u who\u purchased \u id)修复了此问题,但请求似乎太大-导致服务器超时我得到TypeError在尝试使用数组时无法引用数组..-试着传递ID,我得到了一个语法error@BryanSpence请分享代码,也许它是其他东西,现在我没有改变任何东西-我有它,正如你上面提到的。当我在“id not in?”行中包含购买id的用户时,我得到TypeError-无法引用Arrayso using user.where.not(id:users\u who\u Purchase\u id)修复了此问题,但请求似乎太大-导致服务器超时