Class: ActiveRecord::Associations::ClassMethods::JoinDependency

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

Defined Under Namespace

Classes: JoinAssociation, JoinBase

Instance Method Summary collapse

Instance Method Details

#construct_association(record, join, row) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/composite_primary_keys/associations.rb', line 69

def construct_association(record, join, row)
  case join.reflection.macro
    when :has_many, :has_and_belongs_to_many
      collection = record.send(join.reflection.name)
      collection.loaded

      join_aliased_primary_keys = join.active_record.composite? ? 
        join.aliased_primary_key : [join.aliased_primary_key]
      return nil if 
        record.id.to_s != join.parent.record_id(row).to_s or not
        join_aliased_primary_keys.select {|key| row[key].nil?}.blank?
      association = join.instantiate(row)
      collection.target.push(association) unless collection.target.include?(association)
    when :has_one, :belongs_to
      return if record.id.to_s != join.parent.record_id(row).to_s or row[join.aliased_primary_key].nil?
      association = join.instantiate(row)
      record.send("set_#{join.reflection.name}_target", association)
    else
      raise ConfigurationError, "unknown macro: #{join.reflection.macro}"
  end
  return association
end