diff options
author | Sean Griffin <sean@thoughtbot.com> | 2015-01-25 17:06:13 -0700 |
---|---|---|
committer | Sean Griffin <sean@thoughtbot.com> | 2015-01-25 17:06:13 -0700 |
commit | 2ae49dd073a8037ef7ea69e7b1f5507ff514a051 (patch) | |
tree | 668077cd4a39b96b50853444756a2a5e886872e2 /activerecord/lib/active_record/relation/query_methods.rb | |
parent | 2da8f2154b2f4c6beac5e50225742beb3caea996 (diff) | |
download | rails-2ae49dd073a8037ef7ea69e7b1f5507ff514a051.tar.gz rails-2ae49dd073a8037ef7ea69e7b1f5507ff514a051.tar.bz2 rails-2ae49dd073a8037ef7ea69e7b1f5507ff514a051.zip |
Move `where.not` logic into `WhereClause`
Diffstat (limited to 'activerecord/lib/active_record/relation/query_methods.rb')
-rw-r--r-- | activerecord/lib/active_record/relation/query_methods.rb | 17 |
1 files changed, 2 insertions, 15 deletions
diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb index 863d7bb1aa..d2473188cb 100644 --- a/activerecord/lib/active_record/relation/query_methods.rb +++ b/activerecord/lib/active_record/relation/query_methods.rb @@ -41,23 +41,10 @@ module ActiveRecord # User.where.not(name: "Jon", role: "admin") # # SELECT * FROM users WHERE name != 'Jon' AND role != 'admin' def not(opts, *rest) - where_value = @scope.send(:build_where, opts, rest).map do |rel| - case rel - when NilClass - raise ArgumentError, 'Invalid argument for .where.not(), got nil.' - when Arel::Nodes::In - Arel::Nodes::NotIn.new(rel.left, rel.right) - when Arel::Nodes::Equality - Arel::Nodes::NotEqual.new(rel.left, rel.right) - when String - Arel::Nodes::Not.new(Arel::Nodes::SqlLiteral.new(rel)) - else - Arel::Nodes::Not.new(rel) - end - end + where_clause = @scope.send(:where_clause_factory).build(opts, rest) @scope.references!(PredicateBuilder.references(opts)) if Hash === opts - @scope.where_values += where_value + @scope.where_clause += where_clause.invert @scope end end |