Rails查找 - 按Paperclip附件的顺序排序,然后记录创建日期时间

时间:2010-01-19 05:41:36

标签: ruby-on-rails paperclip

我正在构建一个项目的图库索引,其中一些项目有照片而其他项目没有。

我想获取所有项目(或使用will_paginate的子集)并首先按照带有照片的项目(通过Paperclip附加)进行排序,然后按记录创建日期进行排序。

我需要第一部分的二进制“具有附件”类型状态。我是否需要制作一些额外的模型属性并使用paperclip的回调来设置二进制列的状态?或者有更好的方法吗?

我更愿意在数据库级别进行这种排序,因为我们将使用will_paginate循环遍历记录块。

提前致谢

2 个答案:

答案 0 :(得分:3)

你不需要创建一个额外的字段,而是使用CONV将文件名转换为boolean(我假设你在MySQL上运行它 - 但是在其他RDBMS上可以使用等效的函数)。

ORDER BY CONV(photo_file_name,2,2) DESC, created_at

从技术上讲,CONV是一个在不同基数之间转换数字的函数,但它接受字符串输入。如果photo_file_name列中存在值,则返回0;如果输入NULL,则返回NULL。

MySQL CONV Reference

答案 1 :(得分:2)

因为我们在开发中使用SQLite并在生产中使用postgres(并且可能很快就会生产)CONV()不可用。

我们在ORDER BY子句中进行了比较,以创建所需的二进制值。

ORDER BY (photo_file_name IS NULL) ASC, created_at DESC 

这似乎得到了我们所有数据库的支持,并实现了预期的目标。