Ruby on rails 获取不包含';与特定id无关
我有名为订单和打印机的型号 订单可以由多台打印机打印,但特定打印机可以打印一次 我有另一个型号的OrderPrinter,它记录了哪些打印机打印了它 所以,每当打印机说PrinterA发送请求时,我必须找到PrinterA尚未打印的订单并将其返回 我正在努力实现这一目标Ruby on rails 获取不包含';与特定id无关,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,我有名为订单和打印机的型号 订单可以由多台打印机打印,但特定打印机可以打印一次 我有另一个型号的OrderPrinter,它记录了哪些打印机打印了它 所以,每当打印机说PrinterA发送请求时,我必须找到PrinterA尚未打印的订单并将其返回 我正在努力实现这一目标 Order.left_outer_joins(:order_printers) .where("order_printers.printer_id IS NULL OR order_printers.printer_i
Order.left_outer_joins(:order_printers)
.where("order_printers.printer_id IS NULL OR order_printers.printer_id != ?", printer.id)
.order(:id).distinct.limit(1)
为空检查是否不存在任何关系,这是正常的
订购打印机。打印机id!=?,printer.id正在尝试查找它是否从未被打印出来
我知道它有一个问题,好像它已经被PrinterA打印出来了&之前用其他打印机打印过,比如PrinterB,但这次检查失败了&它返回了记录,尽管它已经被PrinterA打印出来了
如何处理此问题?您可以执行子查询:
Order.where.not(
id: printer.orders
)
这将创建以下查询:
SELECT "orders".* FROM "orders"
WHERE "orders"."id"
NOT IN (
SELECT "orders"."id" FROM "orders"
INNER JOIN "order_printers"
ON "orders"."id" = "order_printers"."order_id"
WHERE "order_printers"."printer_id" = ?
) LIMIT ?
这假设您的模型中有一个间接关联设置:
class Printer < ApplicationRecord
has_many :order_printers
has_many :orders, through: :order_printers
end
类打印机