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

4

2 回答 2

3

Rails 修改Class类以包含一个const_missing在使用未定义类时调用的方法。然后它会加载一些东西来尝试加载请求的类。

这在 ActiveSupport 中的实现是在lib/active_support/dependencies.rb.

于 2013-03-17T23:51:06.167 回答
-1

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

于 2013-03-17T23:13:53.117 回答