如何加载&获取rails app中使用的所有活动记录模型的集合。 它应该提供来自gems,plugins以及在父层次结构中具有活动记录库的子类的类。
ActiveRecord::Base.descendants.collect(&:name)
给我列表,但它只在所有类加载后才能显示。 有没有办法手动加载rails app中的所有类?
答案 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