Class: Elasticsearch::Model::Extensions::OuterDocumentUpdating::Update::ThroughPolymorphicAssociation
Overview
Configures callbacks to update the index of the model associated through a polymorphic association
Class Method Summary
collapse
Instance Method Summary
collapse
#initialize
Class Method Details
.applicable_to?(klass) ⇒ Boolean
53
54
55
|
# File 'lib/elasticsearch/model/extensions/outer_document_updating.rb', line 53
def self.applicable_to?(klass)
!! polymorphic_assoc_for(klass)
end
|
.polymorphic_assoc_for(klass) ⇒ Object
57
58
59
60
61
|
# File 'lib/elasticsearch/model/extensions/outer_document_updating.rb', line 57
def self.polymorphic_assoc_for(klass)
klass.reflect_on_all_associations.find { |a|
a.macro == :belongs_to && a.options[:polymorphic]
}
end
|
Instance Method Details
#apply ⇒ Object
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/elasticsearch/model/extensions/outer_document_updating.rb', line 63
def apply
parent_class = @parent_class
child_class = @child_class
polymorphic_assoc = self.class.polymorphic_assoc_for(child_class)
polymorphic_assoc_name = polymorphic_assoc.name
parent_type_attribute_name = :"#{polymorphic_assoc_name}_type"
parent_id_attribute_name = :"#{polymorphic_assoc_name}_id"
only_if = -> updated_record {
updated_record.send(parent_type_attribute_name) == parent_class.name
}
records_to_update_documents = -> updated_record {
parent_class.where(id: updated_record.send(parent_id_attribute_name))
}
[only_if, records_to_update_documents]
end
|