diff options
author | Sean Griffin <sean@thoughtbot.com> | 2015-01-25 17:48:11 -0700 |
---|---|---|
committer | Sean Griffin <sean@thoughtbot.com> | 2015-01-25 17:50:24 -0700 |
commit | fcb95d67440d7e296dfeaa343ecf67a05216dca0 (patch) | |
tree | 607dfb51a8e8f90c379aed18d82ff00d5e4352c8 /activerecord/lib | |
parent | 4b71ab089ce57cf063005f014e1ff1bb675c46c7 (diff) | |
download | rails-fcb95d67440d7e296dfeaa343ecf67a05216dca0.tar.gz rails-fcb95d67440d7e296dfeaa343ecf67a05216dca0.tar.bz2 rails-fcb95d67440d7e296dfeaa343ecf67a05216dca0.zip |
Correct the implementation for `unscope(:where)`
The code assumes that non-single-value methods mean multi value methods.
That is not the case. We need to change the accessor name, and only
assign an array for multi value methods
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/relation/query_methods.rb | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb index 1568064e18..807de3fc9f 100644 --- a/activerecord/lib/active_record/relation/query_methods.rb +++ b/activerecord/lib/active_record/relation/query_methods.rb @@ -900,16 +900,19 @@ module ActiveRecord raise ArgumentError, "Called unscope() with invalid unscoping argument ':#{scope}'. Valid arguments are :#{VALID_UNSCOPING_VALUES.to_a.join(", :")}." end - single_val_method = Relation::SINGLE_VALUE_METHODS.include?(scope) - unscope_code = "#{scope}_value#{'s' unless single_val_method}=" + clause_method = Relation::CLAUSE_METHODS.include?(scope) + multi_val_method = Relation::MULTI_VALUE_METHODS.include?(scope) + if clause_method + unscope_code = "#{scope}_clause=" + else + unscope_code = "#{scope}_value#{'s' if multi_val_method}=" + end case scope when :order result = [] - when :where - self.bind_values = [] else - result = [] unless single_val_method + result = [] if multi_val_method end self.send(unscope_code, result) |