因此,我有一个Photo可以在full_size和下载的模型presentation_size。用户下载照片时,我会在照片的full_downloads和presentation_downloads属性上进行跟踪。
Photo
full_size
presentation_size
full_downloads
presentation_downloads
很好
有时候,我想知道已经下载了多少个文件。我有一个简单的方法,total_downloads看起来像这样:
total_downloads
def total_downloads self.full_downloads + self.presentation_downloads end
我的问题是: 我希望能够通过所有这三种方式(完整,演示文稿,总下载量)订购照片。前两个很容易,但是如何按两列的总和来排序?请注意,这至少需要同时与SQLite和PG兼容。
附带的问题是,使该total_downloads方法成为查询会更快吗?如果是的话,编写该方法的最佳方法是什么?我知道对您可以调用的类进行总结Photo.sum(...),但是我不确定如何对一条记录中的两列执行此操作。
Photo.sum(...)
谢谢!
您可以尝试以下方法:
Photo.order('full_downloads + presentation_downloads')
它将运行以下SQL查询:
SELECT "photos".* FROM "photos" ORDER BY full_downloads + presentation_downloads
但是,这可能很慢。如果数据集很大并且经常使用此排序顺序,则应考虑创建一个total_downloads列,并在记录full_downloads或presentation_downloads列发生更改时重新计算其值。