Flowdock
method

add_constraints

Importance_0
add_constraints(scope, owner, chain) 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 117
        def add_constraints(scope, owner, chain)
          scope = last_chain_scope(scope, chain.last, owner)

          chain.each_cons(2) do |reflection, next_reflection|
            scope = next_chain_scope(scope, reflection, next_reflection)
          end

          chain_head = chain.first
          chain.reverse_each do |reflection|
            # 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, scope_chain_item, owner)

              if scope_chain_item == chain_head.scope
                scope.merge! item.except(:where, :includes, :unscope, :order)
              elsif !item.references_values.empty?
                scope.merge! item.only(:joins, :left_outer_joins)

                associations = item.eager_load_values | item.includes_values

                unless associations.empty?
                  scope.joins! item.construct_join_dependency(associations, Arel::Nodes::OuterJoin)
                end
              end

              reflection.all_includes do
                scope.includes_values |= item.includes_values
              end

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

          scope
        end
Register or log in to add new notes.