2014-09-26 36 views
2

只是好奇,为什么发生这种情况在轨控制台:应用程序控制器没有子类?

Loading development environment (Rails 4.1.5) 
2.1.2 :001 > require 'application_controller' 
=> true 
2.1.2 :002 > ApplicationController 
=> ApplicationController 
2.1.2 :003 > ApplicationController.subclasses 
=> [] 
2.1.2 :004 > ::ApplicationController.descendants 
=> [] 

我有这个控制器

class MyController < ApplicationController 
end 

所以我很期待ApplicationController.subclasses #=> [MyController],但是,我发现了一个空数组:(

+2

这个答案和第一条评论可能会让你感兴趣http://stackoverflow.com/a/1564401/976775 – MrYoshiji 2014-09-26 14:08:21

+0

因为懒加载。 – 2014-09-26 14:10:28

+0

@MrYoshiji:我在生产模式'rails c -e production'中尝试了相同的方法,它返回相同的结果。''[''' – 2014-09-26 14:26:53

回答

2

好,归功于MrYoshiji,但这里是你如何显示子类:

Loading development environment (Rails 4.1.5) 
2.1.2 :001 > require 'application_controller' 
=> true 
2.1.2 :001 > require 'my_controller' 
=> true 
2.1.2 :002 > ApplicationController 
=> ApplicationController 
2.1.2 :003 > ApplicationController.subclasses 
=> [MyController] 

延迟加载意味着对象在内存中不存在,直到它在运行时期间被专门调用。我的第二个命令require 'my_controller主动引用了ApplicationController的一个子类,所以当我们用.subclass方法列出它的子类时,它就会出现。

相关问题