Подкласс ActsAsTaggableOn: Tag? - PullRequest
       29

Подкласс ActsAsTaggableOn: Tag?

0 голосов
/ 27 марта 2020

Попытка создать подкласс ActsAsTaggableOn:Tag для индексирования тегов при создании.

module ActsAsTaggableOn
  class Tag < ::ActiveRecord::Base
    include AlgoliaSearch

    TAG_INDEX = "Tags_#{Rails.env}"

    algoliasearch per_environment: true do
      attribute :name, :taggings_count
      attributesToIndex ['name']
      customRanking ['desc(taggings_count)']
    end
  end
end

Что я пытаюсь сделать: Когда тег создан, индексируйте его в Алголии.

Что происходит: При сохранении тега или модели, использующей acts_as_taggable_on (например, сообщение), я получаю эту ошибку:

undefined method find_or_create_all_with_like_by_name

Похоже, что подкласс ActsAsTaggableOn::Tag не может найти метод родителей find_or_create_all_with_like_by_name.

Кто-нибудь знает, есть ли способ подкласса класса Tag?

1 Ответ

0 голосов
/ 27 марта 2020

Я хотел бы спросить, действительно ли вы хотите подклассировать его вообще, когда вы можете просто создать модуль и использовать его для украшения существующего класса с помощью этой новой функции.

module MyTagDecorator
  def self.included(base)
    base.class_eval do
      include AlgoliaSearch
      TAG_INDEX = "Tags_#{Rails.env}"
      algoliasearch per_environment: true do
        attribute :name, :taggings_count
        attributesToIndex ['name']
        customRanking ['desc(taggings_count)']
      end
    end
  end
end

А затем включить модуль в класс, который вы расширяете:

ActsAsTaggableOn::Tag.include(MyTagDecorator)

См .:

...