我正在构建一个项目的图库索引,其中一些项目有照片而其他项目没有。
我想获取所有项目(或使用will_paginate的子集)并首先按照带有照片的项目(通过Paperclip附加)进行排序,然后按记录创建日期进行排序。
我需要第一部分的二进制“具有附件”类型状态。我是否需要制作一些额外的模型属性并使用paperclip的回调来设置二进制列的状态?或者有更好的方法吗?
我更愿意在数据库级别进行这种排序,因为我们将使用will_paginate循环遍历记录块。
提前致谢
答案 0 :(得分:3)
你不需要创建一个额外的字段,而是使用CONV将文件名转换为boolean(我假设你在MySQL上运行它 - 但是在其他RDBMS上可以使用等效的函数)。
ORDER BY CONV(photo_file_name,2,2) DESC, created_at
从技术上讲,CONV是一个在不同基数之间转换数字的函数,但它接受字符串输入。如果photo_file_name列中存在值,则返回0;如果输入NULL,则返回NULL。
答案 1 :(得分:2)
因为我们在开发中使用SQLite并在生产中使用postgres(并且可能很快就会生产)CONV()不可用。
我们在ORDER BY子句中进行了比较,以创建所需的二进制值。
ORDER BY (photo_file_name IS NULL) ASC, created_at DESC
这似乎得到了我们所有数据库的支持,并实现了预期的目标。