Changeset 4274
- Timestamp:
- 04/26/06 06:37:04 (2 years ago)
- Files:
-
- trunk/activerecord/CHANGELOG (modified) (1 diff)
- trunk/activerecord/lib/active_record/base.rb (modified) (3 diffs)
- trunk/activerecord/test/base_test.rb (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/activerecord/CHANGELOG
r4273 r4274 1 1 *SVN* 2 3 * Add support for :order option to with_scope. Closes #3887. [eric.daspet@survol.net] 2 4 3 5 * Prettify output of schema_dumper by making things line up. Closes #4241 [Caio Chassot <caio@v2studio.com>] trunk/activerecord/lib/active_record/base.rb
r4225 r4274 838 838 839 839 if f = method_scoping[:find] 840 f.assert_valid_keys([ :conditions, :joins, :select, :include, :from, :offset, :limit, : readonly ])840 f.assert_valid_keys([ :conditions, :joins, :select, :include, :from, :offset, :limit, :order, :readonly ]) 841 841 f[:readonly] = true if !f[:joins].blank? && !f.has_key?(:readonly) 842 842 end … … 1013 1013 1014 1014 sql << " GROUP BY #{options[:group]} " if options[:group] 1015 sql << " ORDER BY #{options[:order]} " if options[:order] 1016 1015 1016 add_order!(sql, options[:order]) 1017 1017 add_limit!(sql, options, scope) 1018 1018 … … 1034 1034 else 1035 1035 [o] 1036 end 1037 end 1038 1039 def add_order!(sql, order) 1040 if order 1041 sql << " ORDER BY #{order}" 1042 sql << ", #{scope(:find, :order)}" if scoped?(:find, :order) 1043 else 1044 sql << " ORDER BY #{scope(:find, :order)}" if scoped?(:find, :order) 1036 1045 end 1037 1046 end trunk/activerecord/test/base_test.rb
r4188 r4274 1165 1165 end 1166 1166 1167 def test_scoped_find_order 1168 # Test order in scope 1169 scoped_developers = Developer.with_scope(:find => { :limit => 1, :order => 'salary DESC' }) do 1170 Developer.find(:all) 1171 end 1172 assert_equal 'Jamis', scoped_developers.first.name 1173 assert scoped_developers.include?(developers(:jamis)) 1174 # Test scope without order and order in find 1175 scoped_developers = Developer.with_scope(:find => { :limit => 1 }) do 1176 Developer.find(:all, :order => 'salary DESC') 1177 end 1178 # Test scope order + find order, find has priority 1179 scoped_developers = Developer.with_scope(:find => { :limit => 3, :order => 'id DESC' }) do 1180 Developer.find(:all, :order => 'salary ASC') 1181 end 1182 assert scoped_developers.include?(developers(:poor_jamis)) 1183 assert scoped_developers.include?(developers(:david)) 1184 assert scoped_developers.include?(developers(:dev_10)) 1185 # Test without scoped find conditions to ensure we get the right thing 1186 developers = Developer.find(:all, :order => 'id', :limit => 1) 1187 assert scoped_developers.include?(developers(:david)) 1188 end 1189 1167 1190 def test_base_class 1168 1191 assert LoosePerson.abstract_class?