Как я могу заставить 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!