Class: ActiveRecord::Associations::Preloader::HasAndBelongsToMany
- Inherits:
-
Object
- Object
- ActiveRecord::Associations::Preloader::HasAndBelongsToMany
- Defined in:
- lib/composite_primary_keys/associations/preloader/has_and_belongs_to_many.rb
Instance Method Summary collapse
- #association_key_alias(field) ⇒ Object
- #association_key_name ⇒ Object
- #join ⇒ Object
- #join_select ⇒ Object
- #records_for(ids) ⇒ Object
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_name ⇒ Object
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 |
#join ⇒ Object
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_select ⇒ Object
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 |