从特定的起始值开始订购activerecord关系

时间:2018-11-20 13:54:54

标签: ruby-on-rails

假设我得到一个photo_id 34

此照片是特定摄影师资产current_photographer.photos.all的一部分:1、23、24、34、78

如何从提供的特定照片ID开始获得current_photographer.photos.all关系的结果=> 34、78、1、23、24?

编辑:我想保持照片的一般顺序。每张照片都以之前创建的照片为准。(这是用于照片转盘)

2 个答案:

答案 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