2013-03-17 92 views
4

在Rails可以app/foo/bar.rb下創建一個模型包含模塊,包含bar.rb:自動創建一個類

class Foo::Bar 
    def some_method 
    puts "I work fine" 
    end 
end 

如果試圖這樣做在一個純Ruby應用程序,你會得到一個NameError: uninitialized constant Foo除非你已經初始化一個模塊Foo

什麼是Rails這樣做,允許它創建類,而無需首先初始化其包含模塊?是否有可能通過諸如activesupport之類的東西來導入此行爲,還是我們要自行實施?

回答

3

滑軌修改Class類以包括const_missing方法當使用一個未定義類被調用。然後它加載一些東西來嘗試加載所請求的類。

在ActiveSupport中執行此操作的步驟爲lib/active_support/dependencies.rb

+0

以下是我所做的: 在您的gem文件中:'gem'activesupport',:require =>'active_support/dependencies''然後在您的代碼中,只需添加您的文件夾: '['app/models ','app/controllers','app/helpers']。each {| f | ActiveSupport :: Dependencies.autoload_paths << File.expand_path(f)}' – kjb 2013-03-18 01:18:46

-1

創建實際模型類是延伸到<的ActiveRecord ::基地

+0

您不必創建擴展ActiveRecord的模型,就可以創建模型來擴展任何東西(或什麼都不)。自動創建模塊的Rails行爲並不特定於擴展ActiveRecord的模型。 – kjb 2013-03-17 23:23:49