From 30a576fa145a8a7d7f68ac295addb24465baf39a Mon Sep 17 00:00:00 2001 From: Damien Mathieu <42@dmathieu.com> Date: Thu, 5 Jul 2012 13:24:59 +0200 Subject: [PATCH] fix querying with an empty hash Closes #6960 --- activerecord/CHANGELOG.md | 2 ++ .../lib/active_record/relation/predicate_builder.rb | 8 ++++++-- activerecord/test/cases/relation/where_test.rb | 11 ++++++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 0d3578f40d..eae36cd258 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,5 +1,7 @@ ## Rails 4.0.0 (unreleased) ## +* Fix querying with an empty hash *Damien Mathieu* + * Fix creation of through association models when using `collection=[]` on a `has_many :through` association from an unsaved model. Fix #7661. diff --git a/activerecord/lib/active_record/relation/predicate_builder.rb b/activerecord/lib/active_record/relation/predicate_builder.rb index 36fc08e6ad..263fdce250 100644 --- a/activerecord/lib/active_record/relation/predicate_builder.rb +++ b/activerecord/lib/active_record/relation/predicate_builder.rb @@ -10,8 +10,12 @@ module ActiveRecord table = Arel::Table.new(column, default_table.engine) association = klass.reflect_on_association(column.to_sym) - value.each do |k, v| - queries.concat expand(association && association.klass, table, k, v) + if value.empty? + queries.concat ['1 = 2'] + else + value.each do |k, v| + queries.concat expand(association && association.klass, table, k, v) + end end else column = column.to_s diff --git a/activerecord/test/cases/relation/where_test.rb b/activerecord/test/cases/relation/where_test.rb index 3163cf79ad..9c0b139dbf 100644 --- a/activerecord/test/cases/relation/where_test.rb +++ b/activerecord/test/cases/relation/where_test.rb @@ -4,10 +4,11 @@ require 'models/price_estimate' require 'models/treasure' require 'models/post' require 'models/comment' +require 'models/edge' module ActiveRecord class WhereTest < ActiveRecord::TestCase - fixtures :posts + fixtures :posts, :edges def test_belongs_to_shallow_where author = Author.new @@ -76,5 +77,13 @@ module ActiveRecord post = Post.first assert_equal post, Post.where(:posts => { 'id' => post.id }).first end + + def test_where_with_table_name_and_empty_hash + assert_equal 0, Post.where(:posts => {}).count + end + + def test_where_with_empty_hash_and_no_foreign_key + assert_equal 0, Edge.where(:sink => {}).count + end end end