代码之家  ›  专栏  ›  技术社区  ›  Maxence

从特定起始值排序ActiveRecord关系

  •  0
  • Maxence  · 技术社区  · 6 年前

    假设我得到一个 photo_id 三十四

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

    怎样才能得到这种关系 当前的摄影师照片。所有 从提供的特定照片ID开始得出结果=>34、78、1、23、24?

    编辑:我想保留照片的常规顺序。每张照片前面都有先前创建的照片。(这是用于照片传送带)

    2 回复  |  直到 6 年前
        1
  •  1
  •   abax    6 年前

    您可以创建两个结果集,一个用于>=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
    
        2
  •  1
  •   xlembouras    6 年前

    我认为您最好在应用程序空间中实现。我真的不知道如何在数据库级别以有意义的方式完成它。

    您可以按原始顺序获取记录,然后操作结果。

    current_photographer.photos.partition {|photo| photo.id < 34 }.reverse.flatten