2013-03-17 97 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