class Elasticsearch::Model::Extensions::OuterDocumentUpdating::Update::ThroughPolymorphicAssociation

Configures callbacks to update the index of the model associated through a polymorphic association @see guides.rubyonrails.org/association_basics.html#polymorphic-associations

Public Class Methods

applicable_to?(klass) click to toggle source
# 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) click to toggle source
# 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

Public Instance Methods

apply() click to toggle source
# 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