Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 4758

Show
Ignore:
Timestamp:
08/14/06 07:19:47 (2 years ago)
Author:
bitsweat
Message:

Fix for deep includes on the same association.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/activerecord/CHANGELOG

    r4752 r4758  
    11*SVN* 
     2 
     3* Fix for deep includes on the same association. [richcollins@gmail.com] 
    24 
    35* Tweak fixtures so they don't try to use a non-ActiveRecord class.  [Kevin Clark] 
  • trunk/activerecord/lib/active_record/associations.rb

    r4721 r4758  
    13941394              unless join_dependency.table_aliases[aliased_table_name].zero? 
    13951395                # if the table name has been used, then use an alias 
    1396                 @aliased_table_name = active_record.connection.table_alias_for "#{pluralize(reflection.name)}_#{parent_table_name}" 
     1396                @aliased_table_name = cascade_alias 
    13971397                table_index = join_dependency.table_aliases[aliased_table_name] 
     1398                join_dependency.table_aliases[@aliased_table_name] += 1 
    13981399                @aliased_table_name = @aliased_table_name[0..active_record.connection.table_alias_length-3] + "_#{table_index+1}" if table_index > 0 
    1399               end 
    1400               join_dependency.table_aliases[aliased_table_name] += 1 
     1400              else 
     1401                join_dependency.table_aliases[aliased_table_name] += 1 
     1402              end 
    14011403               
    14021404              if reflection.macro == :has_and_belongs_to_many || (reflection.macro == :has_many && reflection.options[:through]) 
     
    15301532                instance_eval("%@#{sql.gsub('@', '\@')}@") 
    15311533              end 
     1534               
     1535            private 
     1536              def cascade_alias 
     1537                active_record.connection.table_alias_for "#{pluralize(reflection.name)}_#{parent_table_name}" 
     1538              end 
    15321539          end 
    15331540        end 
  • trunk/activerecord/test/associations_cascaded_eager_loading_test.rb

    r4325 r4758  
    104104    end 
    105105  end 
     106   
     107  def test_eager_association_loading_with_recursive_cascaded_three_levels 
     108    root_node = RecursivelyCascadedTreeMixin.find(:first, :include=>{:children=>{:children=>:children}}, :order => 'mixins.id') 
     109    assert_equal mixins(:recursively_cascaded_tree_4), assert_no_queries { root_node.children.first.children.first.children.first } 
     110  end 
    106111end 
  • trunk/activerecord/test/fixtures/mixin.rb

    r3734 r4758  
    99class TreeMixinWithoutOrder < Mixin 
    1010    acts_as_tree :foreign_key => "parent_id" 
     11end 
     12 
     13class RecursivelyCascadedTreeMixin < Mixin 
     14  acts_as_tree :foreign_key => "parent_id" 
    1115end 
    1216 
  • trunk/activerecord/test/fixtures/mixins.yml

    r2964 r4758  
    3939  type: TreeMixinWithoutOrder 
    4040  parent_id: 
     41 
     42recursively_cascaded_tree_1: 
     43  id: 5005 
     44  type: RecursivelyCascadedTreeMixin 
     45  parent_id: 
     46 
     47recursively_cascaded_tree_2: 
     48  id: 5006 
     49  type: RecursivelyCascadedTreeMixin 
     50  parent_id: 5005 
     51 
     52recursively_cascaded_tree_3: 
     53  id: 5007 
     54  type: RecursivelyCascadedTreeMixin 
     55  parent_id: 5006 
     56 
     57recursively_cascaded_tree_4: 
     58  id: 5008 
     59  type: RecursivelyCascadedTreeMixin 
     60  parent_id: 5007 
    4161 
    4262# List mixins