Ruby on rails 从rails获取所有模型的列表
我需要一个所有模型(类名)的列表,其末尾有“立方体”模式 例如: 我的所有型号: ModelFoo、ModelBar、ModelBarCube、Mode2BarCube 我需要的是:Ruby on rails 从rails获取所有模型的列表,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我需要一个所有模型(类名)的列表,其末尾有“立方体”模式 例如: 我的所有型号: ModelFoo、ModelBar、ModelBarCube、Mode2BarCube 我需要的是: ['ModelBarCube','Mode2BarCube']由于Rails不加载类,除非它需要它们,所以您必须从文件夹中读取模型。这是密码 Dir.glob(Rails.root + '/app/models/*.rb').each { |file| require file } @models = Obje
['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
轨道3
@models = ActiveRecord::Base.
descendants.
select{|x| x.name[-4..-1] == "Cube"}
我在谷歌上搜索答案如何显示所有的Ralis模型,这里的答案组合非常有用,谢谢 所以这里有一些解决方案的组合,甚至可以用于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
为您提供继承表单
ActiveRecord::Base
或任何现有模型的子类的所有模型名称。ActiveRecord::Base.subclass已被弃用,请使用#子类此代码适用于我的用法示例,但当我重新需要先前已需要的模型文件时,有时会收到警告。我通过使用expand_path解决了这个问题,请参见下面的一点更正,希望您不要介意,RAILS_ROOT已更改为RAILS.rootIt没有给出完整的模型列表
@models = ActiveRecord::Base.descendants.map(&:name)