Skip to content

Commit

Permalink
Extract ordered_relation in FinderMethods
Browse files Browse the repository at this point in the history
  • Loading branch information
kamipo committed Jun 24, 2017
1 parent 35a25c3 commit f250da5
Showing 1 changed file with 11 additions and 12 deletions.
23 changes: 11 additions & 12 deletions activerecord/lib/active_record/relation/finder_methods.rb
Expand Up @@ -147,8 +147,7 @@ def first!
def last(limit = nil)
return find_last(limit) if loaded? || limit_value

result = limit(limit)
result.order!(arel_attribute(primary_key)) if order_values.empty? && primary_key
result = ordered_relation.limit(limit)
result = result.reverse_order!

limit ? result.reverse : result.first
Expand Down Expand Up @@ -535,11 +534,7 @@ def find_nth_with_limit(index, limit)
if loaded?
records[index, limit] || []
else
relation = if order_values.empty? && primary_key
order(arel_attribute(primary_key).asc)
else
self
end
relation = ordered_relation

if limit_value.nil? || index < limit_value
relation = relation.offset(offset_index + index) unless index.zero?
Expand All @@ -554,11 +549,7 @@ def find_nth_from_last(index)
if loaded?
records[-index]
else
relation = if order_values.empty? && primary_key
order(arel_attribute(primary_key).asc)
else
self
end
relation = ordered_relation

relation.to_a[-index]
# TODO: can be made more performant on large result sets by
Expand All @@ -572,5 +563,13 @@ def find_nth_from_last(index)
def find_last(limit)
limit ? records.last(limit) : records.last
end

def ordered_relation
if order_values.empty? && primary_key
order(arel_attribute(primary_key).asc)
else
self
end
end
end
end

0 comments on commit f250da5

Please sign in to comment.