gpt4 book ai didi

ruby-on-rails - 按 Rails 中的嵌套关​​联进行分组和计数

转载 作者:太空宇宙 更新时间:2023-11-03 16:23:08 24 4
gpt4 key购买 nike

所以我有以下关联(订单来自鱼的渔获物)。

我想按所属的鱼对一组订单进行分组,然后对每组订单中的订购数量属性求和。

每次捕获我都可以做到

Order.all.group(:catch_id).sum(:qty_ordered)

但不是为了鱼。

class Order < ActiveRecord::Base
belongs_to :user
belongs_to :catch
end

class Catch < ActiveRecord::Base
has_many :orders
belongs_to :fish
end

class Fish < ActiveRecord::Base
has_many :catches
end

有什么建议吗?

最佳答案

你正在这样做:Order.all.group(:catch_id).sum(:qty_ordered)

之所以有效,是因为订单有一个名为 catch_id 的字段,因此您可以按该字段分组。

如果你想按 fish_id 分组,你必须在 Orders 中有一列 fish_id 并且 Orders 将有一个 belongs_to :fish 关联.

要按另一个相关列分组,它会是这样的:

Order.all.group_by {|order| order.catch.fish}

这不是同一个group函数,这是Enumerable函数group_by。由于您的查询返回可枚举,因此可以使用它。它将返回一个散列,其中每个键都是一个 Fish 对象,而值是一个包含该鱼的 Order 对象数组。这可能不是您要查找的数据集。此外,您将无法将 .sum 链接到它上面。

您需要查看您的模型关系,或者使用现有的关系来获取您想要的数据,或者创建更多关联以便能够提取您想要的数据。您想要的确切数据集的示例将有助于确定您的需求。

顺便说一句,使用 Order 作为模型可能不是最好的形式。 Rails 有一个方法 .order ,您可能会发现其中某处存在冲突。

关于ruby-on-rails - 按 Rails 中的嵌套关​​联进行分组和计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30361685/

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