diff options
author | Matt Jones + Scott Walker <pairing+mj+sw@gmail.com> | 2012-01-03 14:52:36 -0500 |
---|---|---|
committer | Matt Jones + Scott Walker <pairing+mj+sw@gmail.com> | 2012-01-03 14:52:36 -0500 |
commit | efbb85c84b3c6c21232d4cf899b2d6a5542681fb (patch) | |
tree | bfa97545425ab7a75e4ff536b2558efd106963da /activerecord/lib/active_record/relation/spawn_methods.rb | |
parent | 9f76659bb8cbef1fb409e1dc1ae8e7edc6006208 (diff) | |
download | rails-efbb85c84b3c6c21232d4cf899b2d6a5542681fb.tar.gz rails-efbb85c84b3c6c21232d4cf899b2d6a5542681fb.tar.bz2 rails-efbb85c84b3c6c21232d4cf899b2d6a5542681fb.zip |
correctly handle order calls after a reorder
Diffstat (limited to 'activerecord/lib/active_record/relation/spawn_methods.rb')
-rw-r--r-- | activerecord/lib/active_record/relation/spawn_methods.rb | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/relation/spawn_methods.rb b/activerecord/lib/active_record/relation/spawn_methods.rb index a5194beae5..de639a48f2 100644 --- a/activerecord/lib/active_record/relation/spawn_methods.rb +++ b/activerecord/lib/active_record/relation/spawn_methods.rb @@ -22,7 +22,7 @@ module ActiveRecord end end - (Relation::MULTI_VALUE_METHODS - [:joins, :where]).each do |method| + (Relation::MULTI_VALUE_METHODS - [:joins, :where, :order]).each do |method| value = r.send(:"#{method}_values") merged_relation.send(:"#{method}_values=", merged_relation.send(:"#{method}_values") + value) if value.present? end @@ -48,7 +48,7 @@ module ActiveRecord merged_relation.where_values = merged_wheres - (Relation::SINGLE_VALUE_METHODS - [:lock, :create_with]).each do |method| + (Relation::SINGLE_VALUE_METHODS - [:lock, :create_with, :reordering]).each do |method| value = r.send(:"#{method}_value") merged_relation.send(:"#{method}_value=", value) unless value.nil? end @@ -57,6 +57,15 @@ module ActiveRecord merged_relation = merged_relation.create_with(r.create_with_value) unless r.create_with_value.empty? + if (r.reordering_value) + # override any order specified in the original relation + merged_relation.reordering_value = true + merged_relation.order_values = r.order_values + else + # merge in order_values from r + merged_relation.order_values += r.order_values + end + # Apply scope extension modules merged_relation.send :apply_modules, r.extensions |