module Hayfork::Join
Public Instance Methods
join(relation, join_value)
click to toggle source
# File lib/hayfork/join.rb, line 4 def join(relation, join_value) case join_value when String relation.joins(join_value) when Symbol reflection = reflection_for(relation.model, join_value) case reflection.macro when :has_many, :has_and_belongs_to_many relation.left_outer_joins(join_value).where(reflection.klass.arel_table[:id].not_eq(nil)) when :belongs_to, :has_one relation.joins(join_value) else fail NotImplementedError, "Joins haven't been implemented for #{reflection.macro.inspect} associations" end else fail NotImplementedError, "Statement#joins does not yet accept #{join_value.class} params like #{join_value.inspect}. Will this scenario work with `has_many through:` or `has_one through:`?" end end
reflection_for(model, association)
click to toggle source
# File lib/hayfork/join.rb, line 25 def reflection_for(model, association) reflection = model.reflect_on_association(association) fail AssociationNotFoundError, "Association ':#{association}' not found on '#{model}'" unless reflection reflection end