instance method
build_joins
Ruby on Rails 6.0.6
Since v3.0.20 PrivateSignature
build_joins(manager, joins, aliases)
No documentation comment.
Parameters
-
managerreq -
joinsreq -
aliasesreq
Source
# File activerecord/lib/active_record/relation/query_methods.rb, line 1127
def build_joins(manager, joins, aliases)
buckets = Hash.new { |h, k| h[k] = [] }
unless left_outer_joins_values.empty?
stashed_left_joins = []
left_joins = valid_association_list(left_outer_joins_values.flatten, stashed_left_joins)
stashed_left_joins.unshift construct_join_dependency(left_joins, Arel::Nodes::OuterJoin)
end
if joins.last.is_a?(ActiveRecord::Associations::JoinDependency)
stashed_eager_load = joins.pop if joins.last.base_klass == klass
end
joins.map! do |join|
if join.is_a?(String)
table.create_string_join(Arel.sql(join.strip)) unless join.blank?
else
join
end
end.delete_if(&:blank?).uniq!
while joins.first.is_a?(Arel::Nodes::Join)
join_node = joins.shift
if !join_node.is_a?(Arel::Nodes::LeadingJoin) && (stashed_eager_load || stashed_left_joins)
buckets[:join_node] << join_node
else
buckets[:leading_join] << join_node
end
end
joins.each do |join|
case join
when Hash, Symbol, Array
buckets[:association_join] << join
when ActiveRecord::Associations::JoinDependency
buckets[:stashed_join] << join
when Arel::Nodes::Join
buckets[:join_node] << join
else
raise "unknown class: %s" % join.class.name
end
end
buckets[:stashed_join].concat stashed_left_joins if stashed_left_joins
buckets[:stashed_join] << stashed_eager_load if stashed_eager_load
build_join_query(manager, buckets, Arel::Nodes::InnerJoin, aliases)
end
Defined in activerecord/lib/active_record/relation/query_methods.rb line 1127
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActiveRecord::QueryMethods