Permalink
Browse files

Make sure Model#active_relation always adds STI conditions if needed

  • Loading branch information...
1 parent cfdfd89 commit 3968825f5ff6a75cb83400716d56ec10f261e41a @lifo lifo committed Jan 16, 2010
@@ -872,7 +872,6 @@ def update_all(updates, conditions = nil, options = {})
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 @@ def column_methods_hash #: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 @@ def merge_conditions(*conditions)
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 @@ def type_name_with_module(type_name)
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
@@ -167,8 +167,6 @@ def construct_calculation_arel(options = {}, merge_with_relation = nil)
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 @@ def construct_calculation_arel_with_included_associations(options, join_dependen
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)).
@@ -29,7 +29,7 @@ def scoped(options = {}, &block)
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
@@ -94,7 +94,9 @@ def only(*onlies)
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]).

0 comments on commit 3968825

Please sign in to comment.