Skip to content

Commit 20e16ad

Browse files
author
Jake Yesbeck
committed
Fix Reported issue involving reoder and last
This should Resolve activerecord-hackery#418 Since the 4.1 version of `reverse_order!` is used, an additional check has been added to actually reorder the `ORDER BY` clause if there are non-nil elements of it. Additionally, a spec has been added to ensure proper ordering takes place.
1 parent 5542266 commit 20e16ad

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

lib/squeel/adapters/active_record/4.1/relation_extensions.rb

+3-1
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,9 @@ def build_from
225225
def build_order(arel)
226226
orders = order_visit(dehashified_order_values)
227227
orders = orders.uniq.reject(&:blank?)
228-
orders = reverse_sql_order(orders) if reverse_order_value && !reordering_value
228+
if reverse_order_value && (!reordering_value || Array(order_values).any?(&:present?))
229+
orders = reverse_sql_order(orders)
230+
end
229231

230232
arel.order(*orders) unless orders.empty?
231233
end

spec/squeel/adapters/active_record/relation_extensions_spec.rb

+5
Original file line numberDiff line numberDiff line change
@@ -930,6 +930,11 @@ module ActiveRecord
930930
sql.should_not match /ORDER BY/
931931
end
932932

933+
it 'reverses the order if used with last' do
934+
expected = Person.all.sort_by { |p| p.id }.last
935+
result = Person.reorder(:id).last
936+
result.should eq(expected)
937+
end
933938
end
934939

935940
describe '#from' do

0 commit comments

Comments
 (0)