From f3741506981d8d4aafb28066f5a3a0509a4da846 Mon Sep 17 00:00:00 2001
From: Pratik Naik <pratiknaik@gmail.com>
Date: Sun, 27 Dec 2009 00:11:31 +0530
Subject: Ensure Model.scoped adds type conditions for STI models

---
 activerecord/lib/active_record/named_scope.rb |  1 +
 activerecord/lib/active_record/relation.rb    | 25 ++++++++++++++-----------
 2 files changed, 15 insertions(+), 11 deletions(-)

(limited to 'activerecord/lib')

diff --git a/activerecord/lib/active_record/named_scope.rb b/activerecord/lib/active_record/named_scope.rb
index 38d54fa8ec..96d361093f 100644
--- a/activerecord/lib/active_record/named_scope.rb
+++ b/activerecord/lib/active_record/named_scope.rb
@@ -28,6 +28,7 @@ module ActiveRecord
         else
           if !scoped?(:find)
             relation = arel_table
+            relation = relation.where(type_condition) if finder_needs_type_condition?
           else
             relation = construct_finder_arel
             include_associations = scope(:find, :include)
diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb
index 853103a606..b6800b07b7 100644
--- a/activerecord/lib/active_record/relation.rb
+++ b/activerecord/lib/active_record/relation.rb
@@ -49,19 +49,22 @@ module ActiveRecord
     end
 
     def joins(join, join_type = nil)
-      join = case join
-        when String
-          @relation.join(join)
-        when Hash, Array, Symbol
-          if @klass.send(:array_of_strings?, join)
-            @relation.join(join.join(' '))
-          else
-            @relation.join(@klass.send(:build_association_joins, join))
-          end
+      return self if join.blank?
+
+      join_relation = case join
+      when String
+        @relation.join(join)
+      when Hash, Array, Symbol
+        if @klass.send(:array_of_strings?, join)
+          @relation.join(join.join(' '))
         else
-          @relation.join(join, join_type)
+          @relation.join(@klass.send(:build_association_joins, join))
+        end
+      else
+        @relation.join(join, join_type)
       end
-      create_new_relation(join)
+
+      create_new_relation(join_relation)
     end
 
     def where(*args)
-- 
cgit v1.2.3