从rails获取所有型号的列表

我需要一个包含所有模型(class_names)的列表,其末尾有“Cube”模式。

例:

我的所有模型:ModelFoo,ModelBar,ModelBarCube,Mode2BarCube

我需要的:

[‘ModelBarCube’,’Mode2BarCube’]

由于Rails不加载类,除非它需要它们,您必须从文件夹中读取模型。 这是代码

Dir.glob(Rails.root + '/app/models/*.rb').each { |file| require file } @models = Object.subclasses_of(ActiveRecord::Base).select { |model| model.name[-4..-1] == "Cube" } 

在rails 3中你要交换@models:

 @models = ActiveRecord::Base.subclasses.collect { |type| type.name }.sort 

对于Rails 3

 @models = ActiveRecord::Base. descendants. select{|x| x.name[-4..-1] == "Cube"} 
 @models = ActiveRecord::Base.descendants.map(&:name) 

为您提供所有模型名称,这些名称可以从ActiveRecord::Baseinheritance,也可以是任何现有模型的子类。

我谷歌搜索答案如何显示所有Ralis模型,这里的答案组合疲惫有帮助,thx。

所以这里是解决方案的组合,甚至对Rails上的STI表也有效

 #Since Rails doesn't load classes unless it needs them, you must read the models from the folder. Here is the code Dir[Rails.root.to_s + '/app/models/**/*.rb'].each do |file| begin require file rescue end end models = ActiveRecord::Base.subclasses.collect { |type| type.name }.sort models.each do |model| print model print ' ' end