阅读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 。