如何加載&獲取Rails應用程序內使用的所有活動記錄模型的集合。 它應該從gem,plugins以及在父層次結構中具有活動記錄基的子類給出類。如何手動加載rails應用程序中的所有類?
ActiveRecord::Base.descendants.collect(&:name)
給出了我的列表,但它只有在所有的類都被加載之後。 有沒有辦法手動加載rails應用程序內的所有類?
如何加載&獲取Rails應用程序內使用的所有活動記錄模型的集合。 它應該從gem,plugins以及在父層次結構中具有活動記錄基的子類給出類。如何手動加載rails應用程序中的所有類?
ActiveRecord::Base.descendants.collect(&:name)
給出了我的列表,但它只有在所有的類都被加載之後。 有沒有辦法手動加載rails應用程序內的所有類?
使用Ruby的問題是,「所有類」是一個比較難以確定的事情。其中一些可能會動態生成並有條件地生成。
有時候,你只需要加載什麼app/models
目前的:
Dir.glob(File.expand_path("app/models/*.rb", Rails.root)).each do |model_file|
require model_file
end
如果有可能包含你需要包括這些模型的其他位置了。
你可能有依賴性,雖然,可以從裝貨前模型B.這就是爲什麼自動加載默認使用和事情就不會在加載排除模型中的。
的唯一可靠的方法讓他們全部加載是以某種方式至少鍛鍊一次。
感謝您的詳細解釋。直到日期的印象是,必須有某種方式來加載在rails應用程序中使用的類,但不是這種情況,自動加載器在需要時加載類。 – 2012-01-30 21:28:41
入門型號列表基於數據庫表 -
ActiveRecord::Base.connection.tables.collect{|t| t.singularize.camelize.constantize rescue nil}.compact
希望以上不會工作,因爲它並不總是有必要與每個數據庫表關聯的模型。 – 2012-01-31 20:44:54
我已經用很多方式行使了http://www.funonrails.com/2012/01/get-models-list-inside-rails-app.html,但還沒有提出清晰的結論。在閱讀tadman的回答後,我意識到它不可能:) – 2012-01-30 21:35:03