Есть ли способ обнаружить все модели, используемые в приложении Rails, которые имеют таблицы базы данных? Я попытался обнаружить все модели в приложении Rails, прочитав все модели из каталога приложений/моделей и просто прочитав все файлы в этом каталоге. Тем не менее, я не думаю, что это лучший подход и потратил немало времени на изучение этого, но я пока не получил лучшего ответа. Кто-нибудь может мне с этим помочь. Большое спасибо!
Чтение всех моделей в приложении Rails
Ответ 1
Я предполагаю, что вы используете 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.
Имейте в виду, что в вашей среде разработки вы не получите полный список подклассов, если они не были загружены/использованы, поэтому я бы рекомендовал выполнить это в вашей производственной среде, таким образом вы можете обеспечить, чтобы все ваши модели были загружены.
Ответ 2
Сначала вам нужно убедиться, что все модели загружены:
Rails.application.eager_load!
В Rails 3 идеальный способ найти всех потомков ActiveRecord с помощью descendants
:
ActiveRecord::Base.descendants
Затем выберите те, у которых есть таблица:
ActiveRecord::Base.descendants.select(&:table_name)
Основа для этого была взята из fooobar.com/info/36993/....