【问题标题】:Class Inheritance and Ruby Modules类继承和 Ruby 模块
【发布时间】: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


【解决方案1】:

试试

module Login
  class HomeController < Login::ApplicationController

  end
end

【讨论】:

  • 正如我所说,我发现这是解决方案,但对我来说似乎并不直观。为什么 ruby​​ 不在当前模块中开始搜索?
  • 看上面的评论,似乎Ruby确实在当前模块中搜索
猜你喜欢
  • 1970-01-01
  • 2012-05-28
  • 2020-08-31
  • 1970-01-01
  • 2018-02-25
  • 2023-03-21
  • 2016-06-24
  • 2012-09-02
  • 2010-11-08
相关资源
最近更新 更多