Как заставить Rails загрузить все модели? - PullRequest
13 голосов
/ 14 июля 2010

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

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

Ответы [ 2 ]

36 голосов
/ 10 ноября 2015

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

Rails.application.eager_load!

14 голосов
/ 14 июля 2010

рельсы 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...