提交 f38b5444 编写于 作者: A Aaron Patterson

add a specific factory method rather than using new

上级 b0175623
......@@ -117,7 +117,7 @@ def klass
# Can be overridden (i.e. in ThroughAssociation) to merge in other scopes (i.e. the
# through association's scope)
def target_scope
AssociationRelation.new(klass, klass.arel_table, self).merge!(klass.all)
AssociationRelation.create(klass, klass.arel_table, self).merge!(klass.all)
end
# Loads the \target if needed and returns it.
......
......@@ -34,7 +34,7 @@ def reader(force_reload = false)
reload
end
@proxy ||= CollectionProxy.new(klass, self)
@proxy ||= CollectionProxy.create(klass, self)
end
# Implements the writer method, e.g. foo.items= for Foo.has_many :items
......
......@@ -105,13 +105,13 @@ def join_constraints
if item.is_a?(Relation)
item
else
ActiveRecord::Relation.new(klass, table).instance_exec(self, &item)
ActiveRecord::Relation.create(klass, table).instance_exec(self, &item)
end
end
if reflection.type
scope_chain_items <<
ActiveRecord::Relation.new(klass, table)
ActiveRecord::Relation.create(klass, table)
.where(reflection.type => foreign_klass.base_class.name)
end
......
......@@ -85,7 +85,7 @@ class Preloader #:nodoc:
def initialize(records, associations, preload_scope = nil)
@records = Array.wrap(records).compact.uniq
@associations = Array.wrap(associations)
@preload_scope = preload_scope || Relation.new(nil, nil)
@preload_scope = preload_scope || Relation.create(nil, nil)
end
def run
......
......@@ -146,7 +146,7 @@ def arel_engine
private
def relation #:nodoc:
relation = Relation.new(self, arel_table)
relation = Relation.create(self, arel_table)
if finder_needs_type_condition?
relation.where(type_condition).create_with(inheritance_column.to_sym => sti_name)
......
......@@ -124,7 +124,7 @@ def table_name=(value)
@quoted_table_name = nil
@arel_table = nil
@sequence_name = nil unless defined?(@explicit_sequence_name) && @explicit_sequence_name
@relation = Relation.new(self, arel_table)
@relation = Relation.create(self, arel_table)
end
# Returns a quoted version of the table name, used to construct SQL statements.
......
......@@ -73,10 +73,8 @@ def method_missing(method, *args, &block)
module ClassMethods # :nodoc:
@@subclasses = ThreadSafe::Cache.new(:initial_capacity => 2)
def new(klass, *args)
relation = relation_class_for(klass).allocate
relation.__send__(:initialize, klass, *args)
relation
def create(klass, *args)
relation_class_for(klass).new(klass, *args)
end
# This doesn't have to be thread-safe. relation_class_for guarantees that this will only be
......
......@@ -22,7 +22,7 @@ def merge
# build a relation to merge in rather than directly merging
# the values.
def other
other = Relation.new(relation.klass, relation.table)
other = Relation.create(relation.klass, relation.table)
hash.each { |k, v|
if k == :joins
if Hash === v
......
......@@ -64,7 +64,7 @@ def only(*onlies)
private
def relation_with(values) # :nodoc:
result = Relation.new(klass, table, values)
result = Relation.create(klass, table, values)
result.extend(*extending_values) if extending_values.any?
result
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册