【发布时间】:2012-09-26 19:28:35
【问题描述】:
为了清晰起见,我决定将 Rails 应用程序分解为不同的模块,作为其中的一部分,我希望每个模块都有自己的 ApplicationController。所以我遍历并为每个模块定义了一个应用程序控制器,如下所示:
module Login
class ApplicationController < ::ApplicationController
...
end
end
然后我会在登录模块中创建一个不同的控制器:
module Login
class HomeController < ApplicationController
end
end
我的期望是,这将首先在 Login 模块中搜索应用程序控制器,但据我所见,它实际上是在继承全局应用程序控制器(我在 Login::ApplicationController 中所做的任何声明都不会被拾取)。我已经四处搜索了有关此的一些信息,但无法弄清楚为什么它在顶级名称空间中使用 ApplicationController 而不是在 Login 中使用 ApplicationController。让 HomeController 从 Login::ApplicationController 继承它工作得很好,但我想了解为什么它在未来没有 Login:: 前缀时不起作用。
【问题讨论】:
-
作为健全性检查,当您从 rails 控制台运行
Login::HomeController.ancestors时,前几个类输出是什么? -
有趣,Login::ApplicationController 实际上列在那里,但 before_filters 和其他调用似乎没有从它运行>
-
你能粘贴控制器的代码并给出一些不起作用的例子吗?
标签: ruby-on-rails ruby