add_constraints(scope, owner, association_klass, refl, chain_head, chain_tail) private

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/association_scope.rb, line 121
      def add_constraints(scope, owner, association_klass, refl, chain_head, chain_tail)
        owner_reflection = chain_tail
        table = owner_reflection.alias_name
        scope = last_chain_scope(scope, table, owner_reflection, owner, association_klass)

        reflection = chain_head
        loop do
          break unless reflection
          table = reflection.alias_name

          unless reflection == chain_tail
            next_reflection = reflection.next
            foreign_table = next_reflection.alias_name
            scope = next_chain_scope(scope, table, reflection, association_klass, foreign_table, next_reflection)
          end

          # Exclude the scope of the association itself, because that
          # was already merged in the #scope method.
          reflection.constraints.each do |scope_chain_item|
            item  = eval_scope(reflection.klass, scope_chain_item, owner)

            if scope_chain_item == refl.scope
              scope.merge! item.except(:where, :includes)
            end

            reflection.all_includes do
              scope.includes! item.includes_values
            end

            scope.unscope!(*item.unscope_values)
            scope.where_clause += item.where_clause
            scope.order_values |= item.order_values
          end

          reflection = reflection.next
        end

        scope
      end
Register or log in to add new notes.