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
original_include = relation.includes_values
relation.select_values = []
relation.includes_values = []
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
final_scope = klass.includes(original_include)
records = final_scope.where(:id => ids)
if first_record
records.first
else
records
end
end
|