From 3968825f5ff6a75cb83400716d56ec10f261e41a Mon Sep 17 00:00:00 2001 From: Pratik Naik Date: Sat, 16 Jan 2010 23:11:35 +0530 Subject: Make sure Model#active_relation always adds STI conditions if needed --- activerecord/lib/active_record/base.rb | 5 ++--- activerecord/lib/active_record/calculations.rb | 4 ---- activerecord/lib/active_record/named_scope.rb | 2 +- activerecord/lib/active_record/relation/spawn_methods.rb | 4 +++- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 5bd24ac3eb..d0db9fadcd 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -872,7 +872,6 @@ module ActiveRecord #:nodoc: relation = active_relation relation = relation.where(conditions) if conditions - relation = relation.where(type_condition) if finder_needs_type_condition? relation = relation.limit(options[:limit]) if options[:limit].present? relation = relation.order(options[:order]) if options[:order].present? @@ -1389,7 +1388,7 @@ module ActiveRecord #:nodoc: def reset_column_information undefine_attribute_methods @column_names = @columns = @columns_hash = @content_columns = @dynamic_methods_hash = @inheritance_column = nil - @active_relation = @arel_engine = nil + @arel_engine = @active_relation = @arel_engine = nil end def reset_column_information_and_inheritable_attributes_for_all_subclasses#:nodoc: @@ -1504,6 +1503,7 @@ module ActiveRecord #:nodoc: def active_relation @active_relation ||= Relation.new(self, arel_table) + finder_needs_type_condition? ? @active_relation.where(type_condition) : @active_relation end def arel_table(table_name_alias = nil) @@ -1564,7 +1564,6 @@ module ActiveRecord #:nodoc: def construct_finder_arel(options = {}, scope = nil) relation = active_relation.apply_finder_options(options) - relation = relation.where(type_condition) if finder_needs_type_condition? relation = scope.merge(relation) if scope relation end diff --git a/activerecord/lib/active_record/calculations.rb b/activerecord/lib/active_record/calculations.rb index a79ceb1d05..ed4218807d 100644 --- a/activerecord/lib/active_record/calculations.rb +++ b/activerecord/lib/active_record/calculations.rb @@ -167,8 +167,6 @@ module ActiveRecord if merge_with_relation relation = merge_with_relation.except(:select, :order, :limit, :offset, :group, :from).merge(relation) - else - relation = relation.where(type_condition) if finder_needs_type_condition? end from = merge_with_relation.from_value if merge_with_relation && merge_with_relation.from_value.present? @@ -194,8 +192,6 @@ module ActiveRecord relation.where_values = merge_with_relation.where_values merge_limit = merge_with_relation.taken - else - relation = relation.where(type_condition) if finder_needs_type_condition? end relation = relation.apply_finder_options(options.slice(:joins, :group, :having, :order, :conditions, :from)). diff --git a/activerecord/lib/active_record/named_scope.rb b/activerecord/lib/active_record/named_scope.rb index 47b69dec62..531419fd8e 100644 --- a/activerecord/lib/active_record/named_scope.rb +++ b/activerecord/lib/active_record/named_scope.rb @@ -29,7 +29,7 @@ module ActiveRecord current_scope = current_scoped_methods unless current_scope - finder_needs_type_condition? ? active_relation.where(type_condition) : active_relation.spawn + active_relation.spawn else construct_finder_arel({}, current_scoped_methods) end diff --git a/activerecord/lib/active_record/relation/spawn_methods.rb b/activerecord/lib/active_record/relation/spawn_methods.rb index 59cfca85ae..33df8fd06c 100644 --- a/activerecord/lib/active_record/relation/spawn_methods.rb +++ b/activerecord/lib/active_record/relation/spawn_methods.rb @@ -94,7 +94,9 @@ module ActiveRecord def apply_finder_options(options) options.assert_valid_keys(VALID_FIND_OPTIONS) - relation = joins(options[:joins]). + relation = spawn + + relation = relation.joins(options[:joins]). where(options[:conditions]). select(options[:select]). group(options[:group]). -- cgit v1.2.3