2012-09-26 78 views
1

为了清晰起见,我决定将Rails应用程序分解成不同的模块,并且作为其中的一部分,我希望每个模块都有自己的ApplicationController。所以,我经历了和每个模块,像这样定义的应用程序控制器:类继承和Ruby模块

module Login 
    class ApplicationController < ::ApplicationController 
    ... 
    end 
end 

然后,我创建登录模块在不同的控制器:

module Login 
    class HomeController < ApplicationController 

    end 
end 

我的期望是,这将首先搜索应用程序控制器的登录模块,但是从我所看到的它实际上继承了全局应用程序控制器(我在Login :: ApplicationController中做出的任何声明都未找到)。我已经搜索了一些关于这方面的信息,但一直没能弄清楚为什么它在顶层名称空间中使用ApplicationController而不是Login中的。 HomeController继承自Login :: ApplicationController,它的工作原理就很好,但我想知道为什么没有Login ::前缀将无法工作。

+1

正如一个全面的检查,是什么第几类输出,当你从铁轨控制台运行'登录:: HomeController.ancestors'? – rossta

+0

有趣的是,Login :: ApplicationController实际上是在那里列出的,但是before_filters和其他调用似乎不能从它运行> –

+0

您可以粘贴控制器的代码并给出一些不起作用的示例吗? – rossta

回答

0

尝试

module Login 
    class HomeController < Login::ApplicationController 

    end 
end 
+0

正如我所说,我发现这是解决方案,但它对我来说并不直观。为什么ruby不能在当前模块中搜索? –

+0

看到上面的评论,似乎Ruby确实在当前模块中搜索 –