2012-01-30 88 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

相關問題