使用 Where 进行搜索,可能全部在 rails

Doing a search with Where and possibly all in rails

我正在开发一个 rails 项目,该项目有两个模型 - incoming_purchases 和 item_instances。一个进货有多个item_instances,一个item_instance属于一个进货。我的问题是我想显示所有已收到的订单,为此,每个 item_instance 都必须从订单中收到。 item_instance 模型有一个 date_received 列。这样我就可以下单了,我们打电话给 1.

订单 1:有两个项目实例,其中一个项目已收到: 第 1 项:date_received:20 年 9 月 15 日 第 2 项:date_recieved:无

我需要显示已填写接收日期值的记录,以便接收订单。因此,不会收到上面的示例。到目前为止,我编写的范围如下所示:

scope :search_for_received_orders, ->{ joins(:item_instances).where.not('item_instances.date_received': [nil] ).distinct }

这将使我得到上面的示例,该示例将是部分填充的订单。我查看未收到订单的代码有效,是这样的:

  scope :search_for_not_received_orders, ->{ joins(:item_instances).where('item_instances.date_received': [nil, ""] ).distinct }

基本上,我需要确保收到的订单的所有项目实例在 date_received 列中都有日期。我想不通。感谢您的帮助。

我在下面的第一个响应中遇到错误:

/home/mcuddy/learn/inventory/src/inventory/app/models/incoming_purchase.rb:23: syntax error, unexpected '}', expecting => ...nces: {!date_received.present?})} ... ^ 

/home/mcuddy/learn/inventory/src/inventory/app/models/incoming_purchase.rb:36: syntax error, unexpected do (for lambda) item_instances.each do |i| ^~ 

/home/mcuddy/learn/inventory/src/inventory/app/models/incoming_purchase.rb:40: syntax error, unexpected end, expecting '}' end ^~~

 scope :received_orders, -> { includes(:item_instances).where.not(item_instances: {!date_received.present?})}

尝试以下操作,同时参考 this 了解如何使用 where 条件

scope :search_for_received_orders, 
   ->{ joins(:item_instances)
       .where.not('item_instances.date_received': nil).distinct }


scope :search_for_not_received_orders, 
    ->{ joins(:item_instances)
        .where("item_instances.date_received IS NULL OR item_instances.date_received = ''"}).distinct }

试试这个:

scope :received_orders, -> { includes(:item_instances).where.not(item_instances: {date_received: nil})}

scope :not_received_orders, -> { includes(:item_instances).where(item_instances: {date_received: nil})}

收到的订单没有任何 date_received 为 nil 的项目实例。 未收到的订单至少有 1 个 date_received nil

的项目实例