module ProximalRecords::Adapters::Postgresql
Public Instance Methods
proximal_records(scope)
click to toggle source
# File lib/proximal_records/adapters/postgresql.rb, line 4 def proximal_records(scope) klass = self.class orders = scope.orders.join(', ') orders = "OVER(#{"ORDER BY #{orders}" if orders.present?})" primary_key = "#{klass.table_name}.#{klass.primary_key}" with_near_by = scope.select("#{klass.table_name}.*, LAG(#{primary_key}) #{orders} AS previous_id, LEAD(#{primary_key}) #{orders} AS next_id") table = with_near_by.arel as = table.as(Arel.sql('z')) a = klass.select('z.*').from(as.to_sql).where(z: {klass.primary_key => id}).limit(1)[0] [(klass.find_by_id(a.previous_id)), (klass.find_by_id(a.next_id))] end