aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorjbranchaud <jbranchaud@gmail.com>2015-10-16 14:59:19 -0500
committerjbranchaud <jbranchaud@gmail.com>2015-10-19 09:30:33 -0500
commitd9bb13ba048bc215249b13001f16cb2d14e91455 (patch)
treeaf7debe0316dabc48e32301856425819441bc8aa /activerecord/lib
parentdd2c94aea6de51b58f75f192e5de16e791b9d2d9 (diff)
downloadrails-d9bb13ba048bc215249b13001f16cb2d14e91455.tar.gz
rails-d9bb13ba048bc215249b13001f16cb2d14e91455.tar.bz2
rails-d9bb13ba048bc215249b13001f16cb2d14e91455.zip
Reorder application of has_many association constraints.
With `unscope!` called last, it undoes `where` constraints of the same value when the `where` is chained after the `unscope`. This is what a `rewhere` does. This is undesirable behavior. The included tests demonstrate both the `unscope(...).where(...)` behavior as well as the direct use of `rewhere(...)`. This is in reference to #21955.
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/associations/association_scope.rb2
1 files changed, 1 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/associations/association_scope.rb b/activerecord/lib/active_record/associations/association_scope.rb
index a140dc239c..48437a1c9e 100644
--- a/activerecord/lib/active_record/associations/association_scope.rb
+++ b/activerecord/lib/active_record/associations/association_scope.rb
@@ -147,9 +147,9 @@ module ActiveRecord
scope.includes! item.includes_values
end
+ scope.unscope!(*item.unscope_values)
scope.where_clause += item.where_clause
scope.order_values |= item.order_values
- scope.unscope!(*item.unscope_values)
end
reflection = reflection.next