Class: ActiveRecord::Reflection::AbstractReflection

Inherits:
Object
  • Object
show all
Defined in:
lib/better_record/concerns/active_record_extensions/reflection_extensions.rb

Instance Method Summary collapse

Instance Method Details

#join_scope(table, foreign_table, foreign_klass = nil) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/better_record/concerns/active_record_extensions/reflection_extensions.rb', line 8

def join_scope(table, foreign_table, foreign_klass = nil)
  unless foreign_klass
    foreign_klass = foreign_table
    foreign_table = nil
  end

  predicate_builder = predicate_builder(table)
  scope_chain_items = join_scopes(table, predicate_builder)
  klass_scope       = klass_join_scope(table, predicate_builder)

  key         = join_keys.key
  foreign_key = join_keys.foreign_key

  klass_scope.where!(table[key].eq(foreign_table[foreign_key])) if foreign_table

  if type
    if options[:strict_primary_type]
      klass_scope.where!(type => BetterRecord::PolymorphicOverride.polymorphic_value(foreign_klass, options))
    else
      klass_scope.where!(type => BetterRecord::PolymorphicOverride.all_types(foreign_klass))
    end
  end

  ntc =
    begin
      klass.finder_needs_type_condition?
    rescue
      false
    end

  if ntc
    klass_scope.where!(klass.send(:type_condition, table))
  end

  scope_chain_items.inject(klass_scope, &:merge!)
end