自动创建类的包含模块

时间:2013-03-17 23:00:10

标签: ruby-on-rails ruby

在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之类的东西导入此行为,还是我们自己实现?

2 个答案:

答案 0 :(得分:3)

Rails修改Class类以包含const_missing方法,该方法在使用未定义的类时被调用。然后加载东西以尝试加载请求的类。

ActiveSupport中的实现位于lib/active_support/dependencies.rb

答案 1 :(得分:-1)

实际上创建的模型类扩展为< ActiveRecord :: Base