2012-01-30 92 views
0

如何加载&获取Rails应用程序内使用的所有活动记录模型的集合。 它应该从gem,plugins以及在父层次结构中具有活动记录基的子类给出类。如何手动加载rails应用程序中的所有类?

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

给出了我的列表,但它只有在所有的类都被加载之后。 有没有办法手动加载rails应用程序内的所有类?

+0

我已经用很多方式行使了http://www.funonrails.com/2012/01/get-models-list-inside-rails-app.html,但还没有提出清晰的结论。在阅读tadman的回答后,我意识到它不可能:) – 2012-01-30 21:35:03

回答

3

使用Ruby的问题是,“所有类”是一个比较难以确定的事情。其中一些可能会动态生成并有条件地生成。

有时候,你只需要加载什么app/models目前的:

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

如果有可能包含你需要包括这些模型的其他位置了。

你可能有依赖性,虽然,可以从装货前模型B.这就是为什么自动加载默认使用和事情就不会在加载排除模型中的。

的唯一可靠的方法让他们全部加载是以某种方式至少锻炼一次。

+0

感谢您的详细解释。直到日期的印象是,必须有某种方式来加载在rails应用程序中使用的类,但不是这种情况,自动加载器在需要时加载类。 – 2012-01-30 21:28:41

2

入门型号列表基于数据库表 -

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

希望以上不会工作,因为它并不总是有必要与每个数据库表关联的模型。 – 2012-01-31 20:44:54

相关问题