diff options
| -rw-r--r-- | activerecord/lib/active_record/associations/join_dependency.rb | 21 | 
1 files changed, 10 insertions, 11 deletions
| diff --git a/activerecord/lib/active_record/associations/join_dependency.rb b/activerecord/lib/active_record/associations/join_dependency.rb index d11a9db1f5..bfaac87e49 100644 --- a/activerecord/lib/active_record/associations/join_dependency.rb +++ b/activerecord/lib/active_record/associations/join_dependency.rb @@ -137,7 +137,7 @@ module ActiveRecord          records = result_set.map { |row_hash|            primary_id = type_caster.type_cast row_hash[primary_key]            parent = parents[primary_id] ||= join_base.instantiate(row_hash) -          construct(parent, assoc, join_associations, row_hash, result_set) +          construct(parent, assoc, row_hash, result_set)            parent          }.uniq @@ -232,27 +232,26 @@ module ActiveRecord          Node.new part        end -      def construct(parent, nodes, join_parts, row, rs) +      def construct(parent, nodes, row, rs)          nodes.sort_by { |k| k.name.to_s }.each do |node|            association_name = node.name            assoc            = node.children -          association = construct_scalar(parent, association_name, join_parts, row, rs) -          construct(association, assoc, join_parts, row, rs) if association +          association = construct_scalar(parent, association_name, row, rs, nodes) +          construct(association, assoc, row, rs) if association          end        end -      def construct_scalar(parent, associations, join_parts, row, rs) +      def construct_scalar(parent, associations, row, rs, nodes)          name = associations.to_s -        join_part = join_parts.detect { |j| -          j.reflection.name.to_s == name && -            j.parent_table_name == parent.class.table_name +        node = nodes.detect { |j| +          j.name.to_s == name && +            j.join_part.parent_table_name == parent.class.table_name          } -        raise(ConfigurationError, "No such association") unless join_part +        raise(ConfigurationError, "No such association") unless node -        join_parts.delete(join_part) -        construct_association(parent, join_part, row, rs) +        construct_association(parent, node.join_part, row, rs)        end        def construct_association(record, join_part, row, rs) | 
