如何在rails应用程序内手动加载所有类?

时间:2012-01-30 14:30:01

标签: ruby-on-rails ruby activerecord

如何加载&获取rails app中使用的所有活动记录模型的集合。 它应该提供来自gems,plugins以及在父层次结构中具有活动记录库的子类的类。

ActiveRecord::Base.descendants.collect(&:name)

给我列表,但它只在所有类加载后才能显示。 有没有办法手动加载rails app中的所有类?

2 个答案:

答案 0 :(得分:3)

Ruby的问题在于“所有类别”确定起来有点困难。其中一些可能是动态和有条件地生成的。

有时您可以加载app/models中的内容:

Dir.glob(File.expand_path("app/models/*.rb", Rails.root)).each do |model_file|
  require model_file
end

如果其他位置可能包含模型,您也需要包含这些模型。

但是,您可能有依赖项,这可能会阻止模型A在模型B之前加载。这就是默认情况下使用自动加载器并且没有加载的原因。

让它们全部加载的唯一可靠方法是以某种方式至少运用它们一次。

答案 1 :(得分:2)

根据数据库表获取模型列表 -

ActiveRecord::Base.connection.tables.collect{|t| t.singularize.camelize.constantize rescue nil}.compact