Class: ActiveRecord::Associations::HasManyThroughAssociation
- Inherits:
-
Object
- Object
- ActiveRecord::Associations::HasManyThroughAssociation
- Defined in:
- lib/composite_primary_keys/associations/has_many_through_association.rb
Instance Method Summary collapse
- #construct_join_attributes(*records) ⇒ Object
- #original_construct_join_attributes ⇒ Object
- #through_records_for(record) ⇒ Object
Instance Method Details
#construct_join_attributes(*records) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/composite_primary_keys/associations/has_many_through_association.rb', line 29 def construct_join_attributes(*records) # CPK if !self.source_reflection.polymorphic? && source_reflection.klass.composite? ensure_mutable ids = records.map do |record| source_reflection.association_primary_key(reflection.klass).map do |key| record.send(key) end end cpk_in_predicate(through_association.scope.klass.arel_table, source_reflection.foreign_key, ids) else original_construct_join_attributes(*records) end end |
#original_construct_join_attributes ⇒ Object
27 |
# File 'lib/composite_primary_keys/associations/has_many_through_association.rb', line 27 alias :original_construct_join_attributes :construct_join_attributes |
#through_records_for(record) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/composite_primary_keys/associations/has_many_through_association.rb', line 4 def through_records_for(record) # CPK # attributes = construct_join_attributes(record) # candidates = Array.wrap(through_association.target) # candidates.find_all do |c| # attributes.all? do |key, value| # c.public_send(key) == value # end # end if record.composite? candidates = Array.wrap(through_association.target) candidates.find_all { |c| c.attributes.slice(*source_reflection.association_primary_key) == record.ids_hash } else attributes = construct_join_attributes(record) candidates = Array.wrap(through_association.target) candidates.find_all do |c| attributes.all? do |key, value| c.public_send(key) == value end end end end |