Class: ActiveRecord::Associations::Preloader::HasAndBelongsToMany

Inherits:
Object
  • Object
show all
Defined in:
lib/composite_primary_keys/associations/preloader/has_and_belongs_to_many.rb

Instance Method Summary collapse

Instance Method Details

#association_key_alias(field) ⇒ Object



24
25
26
# File 'lib/composite_primary_keys/associations/preloader/has_and_belongs_to_many.rb', line 24

def association_key_alias(field)
  "ar_association_key_name_#{field.to_s}"
end

#association_key_nameObject



36
37
38
39
40
41
42
# File 'lib/composite_primary_keys/associations/preloader/has_and_belongs_to_many.rb', line 36

def association_key_name
  # CPK
  # 'ar_association_key_name'
  Array(reflection.foreign_key).map do |key|
    association_key_alias(key)
  end
end

#joinObject



14
15
16
17
18
19
20
21
22
# File 'lib/composite_primary_keys/associations/preloader/has_and_belongs_to_many.rb', line 14

def join
  # CPK
  #condition = table[reflection.association_primary_key].eq(
   # join_table[reflection.association_foreign_key])
  condition = cpk_join_predicate(table, reflection.association_primary_key,
                                 join_table, reflection.association_foreign_key)

  table.create_join(join_table, table.create_on(condition))
end

#join_selectObject



28
29
30
31
32
33
34
# File 'lib/composite_primary_keys/associations/preloader/has_and_belongs_to_many.rb', line 28

def join_select
  # CPK
  # association_key.as(Arel.sql(association_key_name))
  Array(reflection.foreign_key).map do |key|
    join_table[key].as(Arel.sql(association_key_alias(key)))
  end
end

#records_for(ids) ⇒ Object



5
6
7
8
9
10
11
12
# File 'lib/composite_primary_keys/associations/preloader/has_and_belongs_to_many.rb', line 5

def records_for(ids)
  # CPK
  #scope = super
  predicate = cpk_in_predicate(join_table, reflection.foreign_key, ids)
  scope = scoped.where(predicate)

  klass.connection.select_all(scope.arel.to_sql, 'SQL', scope.bind_values)
end