Module: Polyamorous::JoinDependencyExtensions
- Defined in:
- lib/polyamorous/activerecord/join_dependency.rb
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
-
#build(associations, base_klass) ⇒ Object
Replaces ActiveRecord::Associations::JoinDependency#build.
- #construct_tables_for_association!(join_root, association) ⇒ Object
- #join_constraints(joins_to_add, alias_tracker, references) ⇒ Object
Instance Method Details
#build(associations, base_klass) ⇒ Object
Replaces ActiveRecord::Associations::JoinDependency#build
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/polyamorous/activerecord/join_dependency.rb', line 4 def build(associations, base_klass) associations.map do |name, right| if name.is_a? Join reflection = find_reflection base_klass, name.name reflection.check_validity! reflection.check_eager_loadable! klass = if reflection.polymorphic? name.klass || base_klass else reflection.klass end JoinAssociation.new(reflection, build(right, klass), name.klass, name.type) else reflection = find_reflection base_klass, name reflection.check_validity! reflection.check_eager_loadable! if reflection.polymorphic? raise ActiveRecord::EagerLoadPolymorphicError.new(reflection) end JoinAssociation.new(reflection, build(right, reflection.klass)) end end end |
#construct_tables_for_association!(join_root, association) ⇒ Object
50 51 52 53 54 |
# File 'lib/polyamorous/activerecord/join_dependency.rb', line 50 def construct_tables_for_association!(join_root, association) tables = table_aliases_for(join_root, association) association.table = tables.first tables end |
#join_constraints(joins_to_add, alias_tracker, references) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/polyamorous/activerecord/join_dependency.rb', line 30 def join_constraints(joins_to_add, alias_tracker, references) @alias_tracker = alias_tracker @joined_tables = {} @references = {} references.each do |table_name| @references[table_name.to_sym] = table_name if table_name.is_a?(String) end joins = make_join_constraints(join_root, join_type) joins.concat joins_to_add.flat_map { |oj| if join_root.match?(oj.join_root) && join_root.table.name == oj.join_root.table.name walk join_root, oj.join_root, oj.join_type else make_join_constraints(oj.join_root, oj.join_type) end } end |