gpt4 book ai didi

ruby-on-rails - 基于 has_many 范围计数的 Rails 事件记录范围

转载 作者:行者123 更新时间:2023-12-01 10:57:24 25 4
gpt4 key购买 nike

我有一个 Order 模型和一个 Container 模型,其范围如下:

class Order < ActiveRecord::Base
has_many :containers, inverse_of: :order, dependent: :destroy
end

class Container < ActiveRecord::Base
scope :full_pickup_ready, -> { where.not(full_pickup_ready_date: nil) }
end

订单模型有一个字段调用quantity,它表示订单需要的容器数量,但不一定是容器关联的大小,因为并非所有容器数据都在创建订单时输入.

我想根据具有 full_pickup_ready_date 的容器数量是否小于订单的数量字段来确定订单模型的范围。

我知道我可以在订单模型上使用合并来访问容器上的范围,如下所示:

def self.at_origin
joins(:containers).merge(Container.full_pickup_ready).uniq
end

但我如何才能将范围限制为具有 full_pickup_ready_date 的容器总数小于订单上的数量字段的订单?

更新:这相当接近,但我认为使用 select 效率不高:

includes(:containers).select {|o| o.containers.full_pickup_ready.size < o.quantity }

最佳答案

如果您愿意放弃在 Container 上重用作用域,那么您应该能够使用如下内容:

# scope on Order
joins(:containers)
.group("orders.id")
.having("count(CASE WHEN full_pickup_ready_date THEN 1 END) < orders.quantity")

关于ruby-on-rails - 基于 has_many 范围计数的 Rails 事件记录范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41928687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com