add_constraints(scope, owner, 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 127
        def add_constraints(scope, owner, refl, chain_head, chain_tail)
          owner_reflection = chain_tail
          table = owner_reflection.alias_name
          scope = last_chain_scope(scope, table, owner_reflection, owner)

          reflection = chain_head
          while reflection
            table = reflection.alias_name
            next_reflection = reflection.next

            unless reflection == chain_tail
              foreign_table = next_reflection.alias_name
              scope = next_chain_scope(scope, table, reflection, 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, table, 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 = next_reflection
          end

          scope
        end
Register or log in to add new notes.