从rails获取所有型号的列表

时间:2009-08-05 14:39:16

标签: ruby-on-rails ruby activerecord

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

示例:

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

我需要的是什么:

['ModelBarCube','Mode2BarCube']

5 个答案:

答案 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