Module: Prim::InstanceMethods::Reflected

Extended by:
ActiveSupport::Concern
Defined in:
lib/prim/instance_methods.rb

Instance Method Summary collapse

Instance Method Details

#only_one_primaryObject



31
32
33
34
35
36
37
# File 'lib/prim/instance_methods.rb', line 31

def only_one_primary
  if self[:primary]
    siblings.update_all('"primary" = false')
  elsif siblings.where( primary: true ).first.nil?
    self[:primary] = true
  end
end

#siblingsObject

Builds a query selecting all siblings for a given mapping record. A record’s siblings are any records in the table of the ‘reflected_class` that match the given record’s foreign key and, if the association is polymorphic, its foreign type. The set of siblings excludes ‘self` (this record).



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/prim/instance_methods.rb', line 43

def siblings
  foreign_key  = prim_relationship.mapping_reflection.foreign_key
  mapping_type = prim_relationship.mapping_reflection.type
  primary_key  = prim_relationship.reflected_class.primary_key

  # Select all by foreign key first, to handle all cases.
  query = self.class.where( foreign_key => self[ foreign_key ] )

  # Only select by a foreign "type" column if one is used on the `reflected_class`,
  # making it a polymorphic association.
  unless mapping_type.nil?
    query = query.where( mapping_type => self[ mapping_type ] )
  end

  # Exclude this record from the query.
  query.where( self.class.arel_table[ primary_key ].not_eq( self[ primary_key ] ) )
end