From 13c40019d963f346ee91fc1304182d0d019bebe6 Mon Sep 17 00:00:00 2001 From: Dan Haughey Date: Wed, 16 Sep 2009 20:23:36 +0100 Subject: [PATCH] Fixed find_one and fine_some to work with empty conditions --- activerecord/lib/active_record/base.rb | 10 ++++++++-- activerecord/test/cases/finder_test.rb | 24 ++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 4e60904..4cf8bd1 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -1576,7 +1576,10 @@ module ActiveRecord #:nodoc: end def find_one(id, options) - conditions = " AND (#{sanitize_sql(options[:conditions])})" if options[:conditions] + if options[:conditions] + sanitized_conditions = sanitize_sql(options[:conditions]) + conditions = " AND (#{sanitized_conditions})" unless sanitized_conditions.blank? + end options.update :conditions => "#{quoted_table_name}.#{connection.quote_column_name(primary_key)} = #{quote_value(id,columns_hash[primary_key])}#{conditions}" # Use find_every(options).first since the primary key condition @@ -1590,7 +1593,10 @@ module ActiveRecord #:nodoc: end def find_some(ids, options) - conditions = " AND (#{sanitize_sql(options[:conditions])})" if options[:conditions] + if options[:conditions] + sanitized_conditions = sanitize_sql(options[:conditions]) + conditions = " AND (#{sanitized_conditions})" unless sanitized_conditions.blank? + end ids_list = ids.map { |id| quote_value(id,columns_hash[primary_key]) }.join(',') options.update :conditions => "#{quoted_table_name}.#{connection.quote_column_name(primary_key)} IN (#{ids_list})#{conditions}" diff --git a/activerecord/test/cases/finder_test.rb b/activerecord/test/cases/finder_test.rb index 3de0779..5152c16 100644 --- a/activerecord/test/cases/finder_test.rb +++ b/activerecord/test/cases/finder_test.rb @@ -270,6 +270,30 @@ class FinderTest < ActiveRecord::TestCase end end + def test_find_by_id_on_blank_conditions + [nil, " ", [], {}].each do |blank| + assert_nothing_raised { Topic.find(1, :conditions => blank) } + end + end + + def test_find_by_id_on_blank_bind_conditions + [ [""], ["",{}] ].each do |blank| + assert_nothing_raised { Topic.find(1, :conditions => blank) } + end + end + + def test_find_by_ids_on_blank_conditions + [nil, " ", [], {}].each do |blank| + assert_nothing_raised { Topic.find([1,2], :conditions => blank) } + end + end + + def test_find_by_ids_on_blank_bind_conditions + [ [""], ["",{}] ].each do |blank| + assert_nothing_raised { Topic.find([1,2], :conditions => blank) } + end + end + def test_find_on_array_conditions assert Topic.find(1, :conditions => ["approved = ?", false]) assert_raise(ActiveRecord::RecordNotFound) { Topic.find(1, :conditions => ["approved = ?", true]) } -- 1.6.0.4