Я пытаюсь написать плагин / расширение lib, чтобы выполнить действие, в котором мне нужно знать, какие модели были помечены для использования с этим плагином.
В настоящее время я отмечаю модели в соответствии сacts_as_something
метод, который добавляется к каждой модели, предназначенной для использования с плагином.
Основной файл плагина выглядит следующим образом:
# lib/foo.rb
module Foo
class << self
attr_accessor :models
end
self.models = []
module Model
def acts_as_foo
Foo.models << self
end
end
ActiveSupport.on_load(:active_record) do
extend Foo::Model
end
Предполагается использовать для вызоваконтроллер Foo.perform
, который должен знать помеченные модели, чтобы выполнить запланированное действие, идея состоит в том, чтобы получить список моделей от Foo.models
.
. Он работает, как предполагалось, если config.eager_load
в development.rb
установлено значение true, в противном случае файлы моделей еще не использовались / не загружались, и поэтому Foo.models
является пустым массивом.
Моя цель - иметь возможность добавлять больше моделей в Fooбез необходимости изменять код Foo следующим образом.
#app/models/bar.rb
class Bar < ApplicationRecord
acts_as_foo
end
Есть идеи, как лучше всего это реализовать?