Как вручную загрузить все классы внутри приложения rails? - PullRequest
0 голосов
/ 30 января 2012

Как загрузить и получить коллекцию всех моделей с активной записью, используемых в приложении rails.Он должен давать классы из гемов, плагинов, а также подклассы, имеющие базу активных записей в родительской иерархии.

ActiveRecord::Base.descendants.collect(&:name)

дает мне список, но только после загрузки всех классов.Есть ли способ загрузить все классы внутри приложения rails вручную?

Ответы [ 2 ]

3 голосов
/ 30 января 2012

Проблема с Ruby заключается в том, что «все классы» довольно сложно определить.Некоторые из них могут быть сгенерированы динамически и условно.

Иногда вы можете просто загрузить то, что присутствует в app/models:

Dir.glob(File.expand_path("app/models/*.rb", Rails.root)).each do |model_file|
  require model_file
end

Если есть другие местоположения, которые могут содержать модели, которые вам понадобятсявключите и их тоже.

Однако у вас могут быть зависимости, и это может помешать загрузке модели A перед моделью B. Вот почему автозагрузчик используется по умолчанию, а вещи просто не загружаются.

Единственный надежный способ загрузить их всех - это как-то выполнить их хотя бы один раз.

2 голосов
/ 30 января 2012

Получение списка моделей на основе таблиц БД -

ActiveRecord::Base.connection.tables.collect{|t| t.singularize.camelize.constantize rescue nil}.compact
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...