Ruby on rails 如何在Rails查询中获得对象方法的总和?

Ruby on rails 如何在Rails查询中获得对象方法的总和?,ruby-on-rails,ruby,carrierwave,Ruby On Rails,Ruby,Carrierwave,在我的应用程序中,我使用CarrierWave作为文件附件。我有一个文件附件模型,可以通过以下操作获得文件大小: file = FileAttachment.first file.attachment.size Model.sum(:integer_column) 在Rails查询中,可以通过执行以下操作对列求和: file = FileAttachment.first file.attachment.size Model.sum(:integer_column) 使用CarrierWa

在我的应用程序中,我使用CarrierWave作为文件附件。我有一个文件附件模型,可以通过以下操作获得文件大小:

file = FileAttachment.first
file.attachment.size
Model.sum(:integer_column)
在Rails查询中,可以通过执行以下操作对列求和:

file = FileAttachment.first
file.attachment.size
Model.sum(:integer_column)
使用CarrierWave时,
.attachment
方法返回对象,其中一个值为
.size

如何查询
文件附件.attachment.size

现在,这是我的解决方案:

FileAttachment.sum { |file_attachment| file_attachment.attachment.size }

我想知道是否有更好的方法。我不确定我是否理解你的问题。您希望对某些资源的所有附件的大小求和。。我猜您可能希望执行以下操作:
your_resource.file_attachments.map{fa | fa.attachment&.size}.compact.sum

无需map.sum-sum还接受一个块。要处理nil,你可以把它转换成数字,它会给你0,这不会影响和。因此,代码变成
your_resource.file_attachments.sum{| fa | fa.attachment&.size.to_f}
,除非您这样做,否则没有更好的选择了,那就是按您的方式查看记录并求和