1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

cache the plural name on the reflection so we do not pay pluralize costs on joins

This commit is contained in:
Aaron Patterson 2011-06-30 11:24:39 -07:00
parent 2ebc564394
commit f261ef42cc
3 changed files with 15 additions and 8 deletions

View file

@ -32,7 +32,7 @@ module ActiveRecord
end
def table_alias_for(reflection, join = false)
name = alias_tracker.pluralize(reflection.name, reflection.active_record)
name = reflection.plural_name.dup
name << "_#{alias_suffix}"
name << "_join" if join
name

View file

@ -80,12 +80,6 @@ module ActiveRecord
# Abstract base class for AggregateReflection and AssociationReflection. Objects of
# AggregateReflection and AssociationReflection are returned by the Reflection::ClassMethods.
class MacroReflection
attr_reader :active_record
def initialize(macro, name, options, active_record)
@macro, @name, @options, @active_record = macro, name, options, active_record
end
# Returns the name of the macro.
#
# <tt>composed_of :balance, :class_name => 'Money'</tt> returns <tt>:balance</tt>
@ -104,6 +98,19 @@ module ActiveRecord
# <tt>has_many :clients</tt> returns +{}+
attr_reader :options
attr_reader :active_record
attr_reader :plural_name # :nodoc:
def initialize(macro, name, options, active_record)
@macro = macro
@name = name
@options = options
@active_record = active_record
@plural_name = active_record.pluralize_table_names ?
name.to_s.pluralize : name.to_s
end
# Returns the class for the macro.
#
# <tt>composed_of :balance, :class_name => 'Money'</tt> returns the Money class

View file

@ -76,7 +76,7 @@ class ReflectionTest < ActiveRecord::TestCase
end
def test_reflection_klass_for_nested_class_name
reflection = MacroReflection.new(nil, nil, { :class_name => 'MyApplication::Business::Company' }, nil)
reflection = MacroReflection.new(:company, nil, { :class_name => 'MyApplication::Business::Company' }, ActiveRecord::Base)
assert_nothing_raised do
assert_equal MyApplication::Business::Company, reflection.klass
end