Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从rails获取所有模型的列表_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails 从rails获取所有模型的列表

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

我需要一个所有模型(类名)的列表,其末尾有“立方体”模式

例如:

我的所有型号: 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
轨道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)