在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之类的东西导入此行为,还是我们自己实现?
答案 0 :(得分:3)
Rails修改Class
类以包含const_missing
方法,该方法在使用未定义的类时被调用。然后加载东西以尝试加载请求的类。
ActiveSupport中的实现位于lib/active_support/dependencies.rb
。
答案 1 :(得分:-1)
实际上创建的模型类扩展为< ActiveRecord :: Base