method
build_joins
v6.0.0 -
Show latest stable
- Class:
ActiveRecord::QueryMethods
build_joins(manager, joins, aliases)private
No documentation available.
# File activerecord/lib/active_record/relation/query_methods.rb, line 1103
def build_joins(manager, joins, aliases)
buckets = Hash.new { |h, k| h[k] = [] }
unless left_outer_joins_values.empty?
left_joins = valid_association_list(left_outer_joins_values.flatten)
buckets[:stashed_join] << construct_join_dependency(left_joins, Arel::Nodes::OuterJoin)
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::StringJoin) && !buckets[:stashed_join].empty?
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
build_join_query(manager, buckets, Arel::Nodes::InnerJoin, aliases)
end