Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 获取不包含';与特定id无关_Ruby On Rails_Postgresql - Fatal编程技术网

Ruby on rails 获取不包含';与特定id无关

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

我有名为订单和打印机的型号

订单可以由多台打印机打印,但特定打印机可以打印一次

我有另一个型号的OrderPrinter,它记录了哪些打印机打印了它

所以,每当打印机说PrinterA发送请求时,我必须找到PrinterA尚未打印的订单并将其返回

我正在努力实现这一目标

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
类打印机