Class: PassiveRecord::Associations::HasOneRelation

Inherits:
Relation
  • Object
show all
Defined in:
lib/passive_record/associations/has_one.rb

Direct Known Subclasses

HasManyRelation

Instance Attribute Summary

Attributes inherited from Relation

#association, #parent_model

Instance Method Summary collapse

Methods inherited from Relation

#singular?

Instance Method Details

#child_classObject



42
43
44
45
46
47
48
# File 'lib/passive_record/associations/has_one.rb', line 42

def child_class
  @child_class ||= (
    module_name = association.parent_class.name.deconstantize
    module_name = "Object" if module_name.empty?
    (module_name.constantize).const_get(association.child_class_name.singularize)
  )
end

#child_class_nameObject



54
55
56
# File 'lib/passive_record/associations/has_one.rb', line 54

def child_class_name
  child_class.name
end

#create(attrs = {}) ⇒ Object



26
27
28
29
30
31
32
# File 'lib/passive_record/associations/has_one.rb', line 26

def create(attrs={})
  child_class.create(
    attrs.merge(
      parent_model_id_field => parent_model.id
    )
  )
end

#idObject



50
51
52
# File 'lib/passive_record/associations/has_one.rb', line 50

def id
  parent_model.id
end

#lookupObject



22
23
24
# File 'lib/passive_record/associations/has_one.rb', line 22

def lookup
  child_class.find_by(parent_model_id_field => parent_model.id)
end

#lookup_or_createObject



34
35
36
# File 'lib/passive_record/associations/has_one.rb', line 34

def lookup_or_create
  lookup || create
end

#parent_model_id_fieldObject



38
39
40
# File 'lib/passive_record/associations/has_one.rb', line 38

def parent_model_id_field
  association.parent_class.name.demodulize.underscore + "_id"
end