method

join_constraints

Importance_0
v6.0.0 - Show latest stable - 0 notes - Class: JoinAssociation
join_constraints(foreign_table, foreign_klass, join_type, alias_tracker) public

No documentation

This method has no description. You can help the Ruby on Rails community by adding new notes.

Hide source
# File activerecord/lib/active_record/associations/join_dependency/join_association.rb, line 25
        def join_constraints(foreign_table, foreign_klass, join_type, alias_tracker)
          joins = []

          # The chain starts with the target table, but we want to end with it here (makes
          # more sense in this context), so we reverse
          reflection.chain.reverse_each.with_index(1) do |reflection, i|
            table = tables[-i]
            klass = reflection.klass

            join_scope = reflection.join_scope(table, foreign_table, foreign_klass)

            arel = join_scope.arel(alias_tracker.aliases)
            nodes = arel.constraints.first

            others = nodes.children.extract! do |node|
              Arel.fetch_attribute(node) { |attr| attr.relation.name != table.name }
            end

            joins << table.create_join(table, table.create_on(nodes), join_type)

            unless others.empty?
              joins.concat arel.join_sources
              append_constraints(joins.last, others)
            end

            # The current table in this iteration becomes the foreign table in the next
            foreign_table, foreign_klass = table, klass
          end

          joins
        end
Register or log in to add new notes.