Как я могу заставить Rails загружать все модели?

Rails моделирует загрузку по требованию. Для грабли, которую я пишу, мне нужно иметь возможность перебирать все экземпляры ActiveRecord::Base (что возможно с помощью ActiveRecord::Base.send(:subclasses)).

Однако, для того, чтобы выше работали, они уже должны быть загружены. Кто-нибудь знает, как заставить все модели загружаться? В идеале, мне бы не пришлось пробиваться через app/models, так как я хотел бы ловить модели, добавленные плагинами.

Ответ 1

рельсы 2:

Dir[Pathname(RAILS_ROOT) + 'app/models/**/*.rb'].each do |path|
  require path
end

рельсы 3:

Dir[Rails.root + 'app/models/**/*.rb'].each do |path|
  require path
end

другой способ:

(ActiveRecord::Base.connection.tables - %w[schema_migrations]).each do |table|
  table.classify.constantize rescue nil
end

Ответ 2

Мне нужны все модели, загруженные для задачи rake, которая проверяет достоверность всех записей и нашел удобный метод eager_load, который можно использовать просто так

Rails.application.eager_load!