【发布时间】:2012-11-05 16:19:56
【问题描述】:
我有两个命名空间,每个都有自己的控制器和演示者类:
Member::DocumentsController
Member::DocumentPresenter
Guest::DocumentsController
Guest::DocumentPresenter
两个演示者都继承自 ::DocumentPresenter。
控制器在没有指定命名空间的情况下访问它们各自的演示者,例如:
class Guest::DocumentsController < ActionController::Base
def show
DocumentPresenter.new(find_document)
end
end
这通常在同一个命名空间内调用presenter。但是有时在开发环境中我看到 base ::DocumentPresenter 正在被使用。
我怀疑原因是基础 ::DocumentPresenter 已经加载,因此 Rails 类自动加载不会费心进一步查看。有可能是这种情况吗?生产环境也可以吗?
我能想到两种解决方案:
- 将基类重命名为 DocumentPresenterBase
- 在控制器文件中明确要求适当的演示者文件
有没有更好的解决方案?
【问题讨论】:
-
如果你在
Guest::DocumentsController中使用show方法,则只能与Guest::DocumentPresenter一起使用,那么在调用new方法时指定命名空间是最简单的。 -
@Deefour 哈哈是的,我忘记了最明显的一个 - 谢谢。我会等待一个完美的解决方案,这不会让我在我的源文件中添加字符。
-
AFAIK Rails 仅在
production中预加载模型,所以这也应该在生产中发生(但我在这台 ATM 上找不到实际文档)。
标签: ruby-on-rails ruby classloader