我需要一个包含所有模型(class_names)的列表,其末尾有“Cube”模式。
示例:
我所有的模特: ModelFoo,ModelBar,ModelBarCube,Mode2BarCube
我需要的是什么:
['ModelBarCube','Mode2BarCube']
答案 0 :(得分:23)
由于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"
}
答案 1 :(得分:21)
在rails 3中你要交换@models:
@models = ActiveRecord::Base.subclasses.collect { |type| type.name }.sort
答案 2 :(得分:6)
对于Rails 3
@models = ActiveRecord::Base.
descendants.
select{|x| x.name[-4..-1] == "Cube"}
答案 3 :(得分:6)
@models = ActiveRecord::Base.descendants.map(&:name)
为您提供所有模型名称,这些名称可以继承ActiveRecord::Base
形式,也可以是任何现有模型的子类。
答案 4 :(得分:3)
我在google搜索如何显示所有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