Чтение всех моделей в приложении Rails - PullRequest
3 голосов
/ 08 марта 2011

Есть ли способ обнаружить все модели, используемые в приложении Rails с таблицами базы данных? Я попытался обнаружить все модели в приложении Rails, прочитав все модели из каталога app / models и просто прочитав все файлы в этом каталоге. Однако я не думаю, что это лучший подход, и потратил немало времени на его изучение, но лучшего ответа пока не получил. Кто-нибудь может мне с этим помочь. Большое спасибо!

Ответы [ 2 ]

4 голосов
/ 08 марта 2011

Я предполагаю, что вы используете ActiveRecord.Если да, то вот как вы можете получить список всех подклассов ActiveRecord :: Base:

ActiveRecord::Base.subclasses

Вы также можете сделать следующее:

dbmodels = []
ObjectSpace.each_object(Module){ |m| dbmodels << m if m.ancestors.include?(ActiveRecord::Base) && m != ActiveRecord::Base }

dbmodelsтеперь содержат все ваши модели ActiveRecord :: Base.

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

0 голосов
/ 14 марта 2013

Сначала необходимо убедиться, что загружены все модели:

Rails.application.eager_load!

В Rails 3 идеальный способ найти всех потомков ActiveRecord - это descendants:

ActiveRecord::Base.descendants

Затем выберите те, у которых есть таблица:

ActiveRecord::Base.descendants.select(&:table_name)

Основание для этого было извлечено из https://stackoverflow.com/a/10712838/15585.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...