假设我得到一个photo_id
34
此照片是特定摄影师资产current_photographer.photos.all
的一部分:1、23、24、34、78
如何从提供的特定照片ID开始获得current_photographer.photos.all
关系的结果=> 34、78、1、23、24?
编辑:我想保持照片的一般顺序。每张照片都以之前创建的照片为准。(这是用于照片转盘)
答案 0 :(得分:1)
您可以创建两个结果集,一个用于> = 34,一个用于<34,然后将它们组合。
current_photographer.photos.where('id >= ?', 34) + current_photographer.photos.where('id < ?', 34)
这些可能是范围:
scope :above_id, ->(id) { where('id >= ?', id) }
scope :below_id, ->(id) { where('id < ?', id) }
然后:current_photographer.photos.above_id(34) + current_photographer.photos.below_id(34)
或使用范围添加类方法:
def self.above_below_id(id)
above_id(id) + below_id(id)
end
答案 1 :(得分:1)
我认为您最好在应用程序空间中实现。我真的不知道如何在数据库级别以有意义的方式完成它。
您可以按原始顺序获取记录,然后处理结果。
current_photographer.photos.partition {|photo| photo.id < 34 }.reverse.flatten