method
add_constraints
v5.0.0.1 -
Show latest stable
- Class:
ActiveRecord::Associations::AssociationScope
add_constraints(scope, owner, association_klass, refl, chain_head, chain_tail)private
No documentation available.
# 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