From c513b0d7443ce88768aefa7115bb1080a1ed6501 Mon Sep 17 00:00:00 2001 From: Lennart Koopmann Date: Mon, 31 Aug 2009 19:11:30 +0200 Subject: [PATCH] Added support of using OR instead of AND as condition connector --- activerecord/lib/active_record/base.rb | 36 +++++++++++++++++++++++++++++-- 1 files changed, 33 insertions(+), 3 deletions(-) diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index c5be561..13d0a96 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -1516,17 +1516,47 @@ module ActiveRecord #:nodoc: end # Merges conditions so that the result is a valid +condition+ - def merge_conditions(*conditions) + # ==== Parameters + # + # * :conditions - An array of conditions to be merged. + # * :connector - Either AND or OR. Used to connect the conditions in the SQL query. + # ==== Examples + # + # Product.merge_conditions *conditions + # Product.merge_conditions :conditions => conditions + # Product.merge_conditions :conditions => conditions, :connector => "OR" + def merge_conditions(*args) + split_args = args.extract_options! + + if split_args.blank? + conditions = args + connector = "AND" + else + if split_args[:conditions].blank? + conditions = Array.new + else + conditions = split_args[:conditions] + if split_args[:connector].blank? + connector = "AND" + else + connector = split_args[:connector].upcase + end + end + end + + # Only allow AND or OR as connector. Default to AND. + connector = "AND" unless connector == "AND" or connector == "OR" + segments = [] - conditions.each do |condition| + conditions.each do |condition| unless condition.blank? sql = sanitize_sql(condition) segments << sql unless sql.blank? end end - "(#{segments.join(') AND (')})" unless segments.empty? + "(#{segments.join(') ' + connector + ' (')})" unless segments.empty? end private -- 1.6.0.4