阅读Rails应用程序中的所有模型

有没有办法检测Rails应用程序中使用的所有具有数据库表的模型? 我试图通过读取app / models目录中的所有模型来检测Rails应用程序中的所有模型,并简单地读取该目录中的所有文件。 但是,我不认为这是最好的方法,花了相当多的时间研究这个,但我还没有得到更好的答案。 谁能帮我这个。 非常感谢!

我假设您正在使用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模型。

请记住,在您的开发环境中,除非已经加载/使用了子类,否则您将无法获得完整的子类列表,因此我建议您在生产环境中执行此操作,这样您就可以确保已加载所有模型。

首先需要确保加载所有模型:

 Rails.application.eager_load! 

在Rails 3中,查找所有ActiveRecord后代的理想方法是使用descendants

 ActiveRecord::Base.descendants 

然后,选择带有表的那些:

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

其基础来自https://stackoverflow.com/a/10712838/15585 。