method
build_joins
v4.1.8 -
Show latest stable
- Class:
ActiveRecord::QueryMethods
build_joins(manager, joins)private
No documentation available.
# File activerecord/lib/active_record/relation/query_methods.rb, line 973
def build_joins(manager, joins)
buckets = joins.group_by do |join|
case join
when String
:string_join
when Hash, Symbol, Array
:association_join
when ActiveRecord::Associations::JoinDependency
:stashed_join
when Arel::Nodes::Join
:join_node
else
raise 'unknown class: %s' % join.class.name
end
end
association_joins = buckets[:association_join] || []
stashed_association_joins = buckets[:stashed_join] || []
join_nodes = (buckets[:join_node] || []).uniq
string_joins = (buckets[:string_join] || []).map(&:strip).uniq
join_list = join_nodes + custom_join_ast(manager, string_joins)
join_dependency = ActiveRecord::Associations::JoinDependency.new(
@klass,
association_joins,
join_list
)
joins = join_dependency.join_constraints stashed_association_joins
joins.each { |join| manager.from(join) }
manager.join_sources.concat(join_list)
manager
end