有没有一种方法可以获取Rails应用程序中所有模型的集合?

22 浏览
0 Comments

有没有一种方法可以获取Rails应用程序中所有模型的集合?

有没有办法获得Rails应用程序中所有模型的集合?

基本上,我可以这样做:-

Models.each do |model|
  puts model.class.name
end

admin 更改状态以发布 2023年5月24日
0
0 Comments

以防万一有人发现这个问题,我有另一个解决方案,不依赖于dir读取或扩展Class类......

ActiveRecord::Base.send :subclasses

这将返回一个类的数组。因此,您可以这样做

ActiveRecord::Base.send(:subclasses).map(&:name)

0
0 Comments

Rails 3、4和5的完整答案是:

如果cache_classes关闭(默认情况下在开发中关闭,但在生产中启用):

Rails.application.eager_load!

那么:

ActiveRecord::Base.descendants

这确保了应用程序中的所有模型,无论它们在哪里,都已加载,并且您使用的提供模型的任何gems也已加载。

这也应该适用于继承自ActiveRecord :: Base的类,例如Rails 5中的ApplicationRecord,并且仅返回其后代子树:

ApplicationRecord.descendants

如果您想了解更多关于如何完成此操作的信息,请查看ActiveSupport :: DescendantsTracker

0