Module: Nthrecord::ActiveRecord::Relation

Included in:
ActiveRecord::Relation
Defined in:
lib/nthrecord.rb

Instance Method Summary collapse

Instance Method Details

#nthrecord(input = nil) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/nthrecord.rb', line 9

def nthrecord(input = nil)
  first_record = input.nil?
  input = input || 1 
  relation = clone

  # keep these values for the scope
  original_include = relation.includes_values
  
  # purge values
  relation.select_values = []
  relation.includes_values = []

  # query for id 
  id_only_relation = relation.select("#{table_name}.id")
  id_results = connection.select_all(id_only_relation.to_sql)

  
  if input == 1 && id_results.length > 0
   
    ids = id_results.map(&:values).flatten
  else
   
      b = (input - 1).step(id_results.size - 1, input).map { |i| id_results[i] }
      ids = b.map(&:values).flatten

  end
  
  # setup for final query
    final_scope = klass.includes(original_include)

  # query for desired ids
    records = final_scope.where(:id => ids)      
 
  # return value 
  if first_record
   records.first
  else
    records
  end
end