从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::Base
inheritance,也可以是任何现有模型的子类。
我谷歌搜索答案如何显示所有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