gpt4 book ai didi

ruby-on-rails - ruby on rails 中的 sum() 或 group() 虚拟属性

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

假设我有这样一个模型:

class Surface < ActiveRecord::Base
attr_accessible :width, :length

def area
self.width * self.length
end
end

其中 @surface.area 返回表面的面积。现在,假设我有许多名为 @surfaces 的表面,我想对所有区域求和。我该怎么做?

我最喜欢的解决方案是这样的:

@surfaces.sum(:area)

但它不起作用。那么我如何在 rails 中调用 .sum().group() 或任何类似的虚拟属性函数?我想避免 .each 调用 |surface|

提前致谢。

最佳答案

sum 将很乐意接受 SQL 表达式,而不仅仅是列名,因此您需要做的就是将 sum 方法转换为 SQL:

@surfaces.sum('width * height')
@surfaces.sum('surface.width * surface.height') # If you think other tables might be involved.

此外,模型中的类方法混合到关系中(因为作用域和类方法实际上是同一件事),因此您可以添加一个类方法来配合您的实例方法:

class Surface < ActiveRecord::Base
def self.area
sum('surface.width * surface.height')
end
def area
self.width * self.length
end
end

然后说:

@surfaces.area

通常最好让数据库来处理您的数据,这就是它们的用途和擅长之处。

关于ruby-on-rails - ruby on rails 中的 sum() 或 group() 虚拟属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40385536/

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