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
59
60
61
|
# File 'lib/elasticsearch/model/extensions/outer_document_updating.rb', line 59
def self.applicable_to?(klass)
!! polymorphic_assoc_for(klass)
end
|
.polymorphic_assoc_for(klass) ⇒ Object
63
64
65
66
67
|
# File 'lib/elasticsearch/model/extensions/outer_document_updating.rb', line 63
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
# File 'lib/elasticsearch/model/extensions/outer_document_updating.rb', line 69
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
|