从rails获取所有型号的列表

gus*_*ans 17 ruby activerecord ruby-on-rails

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

例:

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

我需要的:

['ModelBarCube','Mode2BarCube']

Sen*_*Uka 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"
  } 
Run Code Online (Sandbox Code Playgroud)

  • 一点点修改希望你不介意,RAILS_ROOT已经改为Rails.root (2认同)

小智 21

在rails 3中你要交换@models:

@models = ActiveRecord::Base.subclasses.collect { |type| type.name }.sort
Run Code Online (Sandbox Code Playgroud)

  • 不推荐使用ActiveRecord :: Base.subclasses,使用#descendants (4认同)

mik*_*ike 6

对于Rails 3

@models = ActiveRecord::Base.
    descendants.
    select{|x| x.name[-4..-1] == "Cube"}
Run Code Online (Sandbox Code Playgroud)


Ami*_*ait 6

@models = ActiveRecord::Base.descendants.map(&:name)
Run Code Online (Sandbox Code Playgroud)

为您提供所有模型名称,这些名称可以继承表单,也可以ActiveRecord::Base是任何现有模型的子类.

  • 它没有提供完整的模型列表 (3认同)

归档时间:

查看次数:

17012 次

最近记录:

12 年,1 月 前