File tree Expand file tree Collapse file tree 6 files changed +35
-8
lines changed
lib/active_record/relation Expand file tree Collapse file tree 6 files changed +35
-8
lines changed Original file line number Diff line number Diff line change @@ -99,9 +99,8 @@ def apply_finder_options(options)
99
99
100
100
relation = relation . readonly ( options [ :readonly ] ) if options . key? :readonly
101
101
102
- # Give precedence to newly-applied orders and groups to play nicely with with_scope
103
102
[ :group , :order ] . each do |finder |
104
- relation . send ( "#{ finder } _values=" , Array . wrap ( options [ finder ] ) + relation . send ( "#{ finder } _values" ) ) if options . has_key? ( finder )
103
+ relation . send ( "#{ finder } _values=" , relation . send ( "#{ finder } _values" ) + Array . wrap ( options [ finder ] ) ) if options . has_key? ( finder )
105
104
end
106
105
107
106
relation = relation . where ( options [ :conditions ] ) if options . has_key? ( :conditions )
Original file line number Diff line number Diff line change @@ -1139,18 +1139,18 @@ def test_scoped_find_order
1139
1139
scoped_developers = Developer . send ( :with_scope , :find => { :limit => 1 } ) do
1140
1140
Developer . find ( :all , :order => 'salary DESC' )
1141
1141
end
1142
- # Test scope order + find order, find has priority
1142
+ # Test scope order + find order, order has priority
1143
1143
scoped_developers = Developer . send ( :with_scope , :find => { :limit => 3 , :order => 'id DESC' } ) do
1144
1144
Developer . find ( :all , :order => 'salary ASC' )
1145
1145
end
1146
1146
assert scoped_developers . include? ( developers ( :poor_jamis ) )
1147
- assert scoped_developers . include? ( developers ( :david ) )
1147
+ assert ! scoped_developers . include? ( developers ( :david ) )
1148
1148
assert ! scoped_developers . include? ( developers ( :jamis ) )
1149
1149
assert_equal 3 , scoped_developers . size
1150
1150
1151
1151
# Test without scoped find conditions to ensure we get the right thing
1152
- developers = Developer . find ( :all , :order => 'id' , :limit => 1 )
1153
- assert scoped_developers . include? ( developers ( :david ) )
1152
+ assert ! scoped_developers . include? ( Developer . find ( 1 ) )
1153
+ assert scoped_developers . include? ( Developer . find ( 11 ) )
1154
1154
end
1155
1155
1156
1156
def test_scoped_find_limit_offset_including_has_many_association
Original file line number Diff line number Diff line change @@ -398,8 +398,8 @@ def test_nested_exclusive_scope
398
398
assert_equal expected , received
399
399
end
400
400
401
- def test_overwriting_default_scope
402
- expected = Developer . find ( :all , :order => 'salary' ) . collect { |dev | dev . salary }
401
+ def test_order_in_default_scope_should_prevail
402
+ expected = Developer . find ( :all , :order => 'salary desc ' ) . collect { |dev | dev . salary }
403
403
received = DeveloperOrderedBySalary . find ( :all , :order => 'salary' ) . collect { |dev | dev . salary }
404
404
assert_equal expected , received
405
405
end
Original file line number Diff line number Diff line change @@ -667,4 +667,22 @@ def test_order_by_relation_attribute
667
667
def test_relations_limit_with_conditions_or_limit
668
668
assert_equal Post . limit ( 2 ) . size , Post . limit ( 2 ) . all . size
669
669
end
670
+
671
+ def test_order_with_find_with_order
672
+ assert_equal 'zyke' , Car . order ( 'name desc' ) . find ( :first , :order => 'id' ) . name
673
+ end
674
+
675
+ def test_default_scope_order_with_named_scope_order
676
+ assert_equal 'zyke' , Car . order_using_new_style . limit ( 1 ) . first . name
677
+ assert_equal 'zyke' , Car . order_using_old_style . limit ( 1 ) . first . name
678
+ end
679
+
680
+ def test_order_using_scoping
681
+ car = Car . order ( 'id DESC' ) . scoping do
682
+ Car . find ( :first , :order => 'id asc' )
683
+ end
684
+ assert_equal 'zyke' , car . name
685
+ end
686
+
687
+
670
688
end
Original file line number Diff line number Diff line change 2
2
id : 1
3
3
name : honda
4
4
engines_count : 0
5
+
6
+ zyke :
7
+ id : 2
8
+ name : zyke
9
+ engines_count : 0
Original file line number Diff line number Diff line change @@ -7,4 +7,9 @@ class Car < ActiveRecord::Base
7
7
scope :incl_tyres , includes ( :tyres )
8
8
scope :incl_engines , includes ( :engines )
9
9
10
+ default_scope :order => 'name desc'
11
+
12
+ scope :order_using_new_style , order ( 'name asc' )
13
+ scope :order_using_old_style , :order => 'name asc'
14
+
10
15
end
You can’t perform that action at this time.
0 commit comments