module ActsAsRecursiveTree::Builders::Strategies::Join

Build a relation using an INNER JOIN.

Public Class Methods

apply_order(builder, relation) click to toggle source
# File lib/acts_as_recursive_tree/builders/strategies/join.rb, line 27
def self.apply_order(builder, relation)
  return relation unless builder.ensure_ordering

  relation.order(builder.recursive_temp_table[builder.depth_column].asc)
end
build(builder) click to toggle source

Builds the relation.

@param builder [ActsAsRecursiveTree::Builders::RelationBuilder] @return [ActiveRecord::Relation]

# File lib/acts_as_recursive_tree/builders/strategies/join.rb, line 15
def self.build(builder)
  final_select_mgr = builder.base_table.join(
    builder.create_select_manger.as(builder.recursive_temp_table.name)
  ).on(
    builder.base_table[builder.primary_key].eq(builder.recursive_temp_table[builder.primary_key])
  )

  relation = builder.klass.joins(final_select_mgr.join_sources)

  apply_order(builder, relation)
end