Fixes bug in ActiveRecord::QueryMethods, #1697

Replace split on comma with a regexp that will reverse all ASC/DESC specifically
This commit is contained in:
Joshua Wehner
2011-08-31 15:04:41 -04:00
parent 508f33f35c
commit 0df27c98d9
2 changed files with 7 additions and 4 deletions

View File

@@ -305,10 +305,8 @@ module ActiveRecord
when Arel::Nodes::Ordering
o.reverse
when String, Symbol
o.to_s.split(',').collect do |s|
s.strip!
s.gsub!(/\sasc\Z/i, ' DESC') || s.gsub!(/\sdesc\Z/i, ' ASC') || s.concat(' DESC')
end
s = o.to_s.gsub(/\s((desc)|(asc))\s*(,|\Z)/i) { |m| " #{$2 ? 'ASC' : 'DESC'}#{$4}" }
s.match(/\s(de|a)sc\Z/i) ? s : s.concat(" DESC")
else
o
end

View File

@@ -934,6 +934,11 @@ class RelationTest < ActiveRecord::TestCase
assert_equal 'zyke', FastCar.order_using_old_style.limit(1).first.name
end
def test_order_with_function_and_last
authors = Author.scoped
assert_equal authors(:bob), authors.order( "id asc, COALESCE( organization_id, owned_essay_id)" ).last
end
def test_order_using_scoping
car1 = CoolCar.order('id DESC').scoping do
CoolCar.find(:first, :order => 'id asc')