searchlogic
searchlogic copied to clipboard
does_not_equal Cannot Handle Ranges, Arrays
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 KaczorDate: 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}