From 3e6e2331b8ed7fbc78121a522a2edf69a7be90aa Mon Sep 17 00:00:00 2001 From: Tim Assmann Date: Mon, 31 Aug 2009 15:31:06 +0200 Subject: [PATCH] added support for mixed arrays of manueal joins and model associations in ActiveRecord::Base.find's :joins option --- activerecord/lib/active_record/base.rb | 11 +++++------ activerecord/test/cases/finder_test.rb | 11 +++++++++++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index c17702d..f43c5df 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -1783,12 +1783,11 @@ module ActiveRecord #:nodoc: merged_joins = scope && scope[:joins] && joins ? merge_joins(scope[:joins], joins) : (joins || scope && scope[:joins]) case merged_joins when Symbol, Hash, Array - if array_of_strings?(merged_joins) - sql << merged_joins.join(' ') + " " - else - join_dependency = ActiveRecord::Associations::ClassMethods::InnerJoinDependency.new(self, merged_joins, nil) - sql << " #{join_dependency.join_associations.collect { |assoc| assoc.association_join }.join} " - end + if merged_joins.is_a?(Array) + merged_joins.delete_if { |join| sql << " #{join} " if join.is_a?(String) } + end + join_dependency = ActiveRecord::Associations::ClassMethods::InnerJoinDependency.new(self, merged_joins, nil) + sql << " #{join_dependency.join_associations.collect { |assoc| assoc.association_join }.join} " when String sql << " #{merged_joins} " end diff --git a/activerecord/test/cases/finder_test.rb b/activerecord/test/cases/finder_test.rb index f1bede9..f9d42c4 100644 --- a/activerecord/test/cases/finder_test.rb +++ b/activerecord/test/cases/finder_test.rb @@ -972,6 +972,17 @@ class FinderTest < ActiveRecord::TestCase assert_equal 1, person_with_reader_and_post.size end + def test_joins_with_mixed_string_array + person_with_reader_and_post = Post.find( + :all, + :joins => [ + "INNER JOIN categorizations ON categorizations.post_id = posts.id", + :readers + ] + ) + assert_equal 1, person_with_reader_and_post.size + end + def test_find_by_id_with_conditions_with_or assert_nothing_raised do Post.find([1,2,3], -- 1.6.1.1