有沒有辦法在Rails應用程序中獲取所有模型的集合?有沒有辦法可以在Rails應用程序中獲得所有模型的集合?基本上,我可以這樣做: -Models.each do |model| puts model.class.nameend
3 回答

米脂
TA貢獻1836條經驗 獲得超3個贊
Rails 3,4和5的整個答案是:
如果cache_classes關閉(默認情況下它在開發中關閉,但在生產中關閉):
Rails.application.eager_load!
然后:
ActiveRecord::Base.descendants
這樣可以確保應用程序中的所有模型(無論它們在何處)都已加載,并且還會加載任何提供模型的寶石。
這也適用于繼承的類ActiveRecord::Base,比如ApplicationRecord在Rails 5中,并且只返回后代的子樹:
ApplicationRecord.descendants
如果您想了解更多關于如何做到這一點,檢查出的ActiveSupport :: DescendantsTracker。

汪汪一只貓
TA貢獻1898條經驗 獲得超8個贊
萬一有人偶然發現這個,我有另一個解決方案,不依賴于讀取或擴展Class類......
ActiveRecord::Base.send :subclasses
這將返回一個類數組。所以你可以這樣做
ActiveRecord::Base.send(:subclasses).map(&:name)
- 3 回答
- 0 關注
- 719 瀏覽
添加回答
舉報
0/150
提交
取消