From 89ab303d8b78a73cb7d306a026f185986f44aa2a Mon Sep 17 00:00:00 2001 From: Carlos Antonio da Silva Date: Fri, 7 Dec 2012 08:53:24 -0200 Subject: Fix where.not with in clause Arel::Nodes::In inherits from Arel::Nodes::Equality, so the case statement was always using the Equality operator for both scenarios, resulting in a not equal query instead. --- activerecord/lib/active_record/relation/query_methods.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'activerecord/lib') diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb index ad9ed98382..d3a13c8e2f 100644 --- a/activerecord/lib/active_record/relation/query_methods.rb +++ b/activerecord/lib/active_record/relation/query_methods.rb @@ -20,15 +20,15 @@ module ActiveRecord # User.where.not(name: nil) # # SELECT * FROM users WHERE name IS NOT NULL # - # User.where.not(name: %(Ko1 Nobu)) + # User.where.not(name: %w(Ko1 Nobu)) # # SELECT * FROM users WHERE name NOT IN ('Ko1', 'Nobu') def not(opts, *rest) where_value = @scope.send(:build_where, opts, rest).map do |rel| case rel - when Arel::Nodes::Equality - Arel::Nodes::NotEqual.new(rel.left, rel.right) 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 -- cgit v1.2.3