This is not handled by ActiveRecord named scopes, so I borrowed some code from ActiveRecord::Base.attribute_condition to make it work. Here is the patch:
more 0001-Added-support-for-ranges-and-arrays-when-using-does_.patch
From 33330f47c4d75c9b03331b04583b9f74898044cc Mon Sep 17 00:00:00 2001
From: Simon Kaczor
Date: Thu, 4 Mar 2010 15:13:55 -0500
Subject: [PATCH] Added support for ranges and arrays when using does_not_equal condition
---
lib/searchlogic/named_scopes/conditions.rb | 11 ++++++++++-
1 files changed, 10 insertions(+), 1 deletions(-)
diff --git a/lib/searchlogic/named_scopes/conditions.rb b/lib/searchlogic/named_scopes/conditions.rb
index 4e24de4..2155ed7 100644
--- a/lib/searchlogic/named_scopes/conditions.rb
+++ b/lib/searchlogic/named_scopes/conditions.rb
@@ -114,7 +114,16 @@ module Searchlogic
when /^equals/
scope_options(condition, column_type, lambda { |a| attribute_condition("#{table_name}.#{column}", a) })
when /^does_not_equal/
- scope_options(condition, column_type, "#{table_name}.#{column} != ?")
+ scope_options(condition, column_type, lambda do |a|
+ case a
+ when Array
+ "#{table_name}.#{column} NOT IN (?)"
+ when Range
+ "#{table_name}.#{column} NOT BETWEEN ? AND ?"
+ else
+ "#{table_name}.#{column} != ?"
+ end
+ end)
when /^less_than_or_equal_to/
scope_options(condition, column_type, "#{table_name}.#{column} <= ?")
when /^less_than/
--
1.6.3.3
This is not handled by ActiveRecord named scopes, so I borrowed some code from ActiveRecord::Base.attribute_condition to make it work. Here is the patch: