diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2011-06-30 11:24:39 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2011-06-30 15:31:22 -0700 |
commit | f261ef42cc2c8f0fc31d6e6f464bacd6ca9eb581 (patch) | |
tree | ac1d59aaac3d0dc0d9fc5d42fbcf092aa009f6d9 | |
parent | 2ebc564394c5aec3d135e774dece6127147ba0c5 (diff) | |
download | rails-f261ef42cc2c8f0fc31d6e6f464bacd6ca9eb581.tar.gz rails-f261ef42cc2c8f0fc31d6e6f464bacd6ca9eb581.tar.bz2 rails-f261ef42cc2c8f0fc31d6e6f464bacd6ca9eb581.zip |
cache the plural name on the reflection so we do not pay pluralize costs on joins
-rw-r--r-- | activerecord/lib/active_record/associations/join_helper.rb | 2 | ||||
-rw-r--r-- | activerecord/lib/active_record/reflection.rb | 19 | ||||
-rw-r--r-- | activerecord/test/cases/reflection_test.rb | 2 |
3 files changed, 15 insertions, 8 deletions
diff --git a/activerecord/lib/active_record/associations/join_helper.rb b/activerecord/lib/active_record/associations/join_helper.rb index 87e33891a5..d094a8def3 100644 --- a/activerecord/lib/active_record/associations/join_helper.rb +++ b/activerecord/lib/active_record/associations/join_helper.rb @@ -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 diff --git a/activerecord/lib/active_record/reflection.rb b/activerecord/lib/active_record/reflection.rb index 6df473d011..57023f5388 100644 --- a/activerecord/lib/active_record/reflection.rb +++ b/activerecord/lib/active_record/reflection.rb @@ -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 diff --git a/activerecord/test/cases/reflection_test.rb b/activerecord/test/cases/reflection_test.rb index 58c78ab058..41312e8661 100644 --- a/activerecord/test/cases/reflection_test.rb +++ b/activerecord/test/cases/reflection_test.rb @@ -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 |