def _arel(associations = [])
      if _on
        _join.new(_table, Arel::Nodes::On.new(_on))
      elsif associations.any?(&:needs_polyamorous?)
        Join.new(associations)
      elsif associations.any?
        associations.reverse.inject({}) do |names, assoc|
          { assoc._reflection.name => names }
        end
      end
    end
def _arel(associations = [])
      if _on
        _join.new(_table, Arel::Nodes::On.new(_on))
      elsif associations.any?(&:needs_polyamorous?)
        Join.new(associations)
      elsif associations.any?
        associations.reverse.inject({}) do |names, assoc|
          { assoc._reflection.name => names }
        end
      end
    end
This method will be invoked by BabySqueel::Nodes::unwrap. When called,
 there are three possible outcomes:

 1. Join explicitly using an on clause. Just return Arel.
 2. Implicit join without using an outer join. In this case, we'll just
    give a hash to Active Record, and join the normal way.
 3. Implicit join using an outer join. In this case, we need to use
    Polyamorous to build the join. We'll return a Join.