所以我有以下关联(一个命令来自一个鱼的捕获)。
我想按照它们所用的鱼对一组订单进行分组,然后按顺序对每个组中的数量订购属性求和。
我可以用
为每个捕获做到这一点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
任何提示?
答案 0 :(得分:1)
你这样做:Order.all.group(:catch_id).sum(:qty_ordered)
并且它有效,因为Order有一个名为catch_id
的字段,因此您可以按该字段进行分组。
如果您想按fish_id
进行分组,则订单和订单中的列fish_id
必须有belongs_to :fish
个关联。
要分组另一个相关列,它将是这样的:
Order.all.group_by {|order| order.catch.fish}
这不是group
函数,这是Enumerable函数group_by
。由于您的查询返回可枚举,因此可以使用它。它将返回一个哈希值,每个键都是一个Fish对象,该值是一个Order对象数组,其中包含该对象。这可能不是您要查找的数据集。此外,您将无法将.sum
链接到其上。
您需要查看模型关系,并使用存在的关系来获取所需的数据,或者创建更多关联以便能够提取所需的数据。您想要的确切数据集的示例将有助于确定您的需求。
除此之外,使用Order作为模型可能不是最好的形式。 Rails有一个方法.order
,你可能会在某个地方发现冲突。