Rails 查看路径未重置

Rails view path not being reset

Given Rails 4.2, Ruby 2.3.1.

理论上,Rails 应该允许您完全重置视图路径,如 here, in the source code 所示。

但是,当我通过 #view_paths= 从控制器回调中重置 view_paths 时,发生了意外情况。

> view_paths.size
=> 2
> new_paths = view_paths.reject { |vp| rejection criteria }
> new_paths.size
=> 1
> view_paths = new_paths
> view_paths.size
=> 2
> _view_paths.size
=> 1

self._view_paths 已成功重置,但 #view_paths 尚未获取这些更改,尽管 simply being a wrapper for self._view_paths。为什么 self._view_paths 正确,而 #view_paths 不正确?

注意:这很重要,因为 Rails 在搜索视图时使用 #view_paths,而不是 self._view_paths

尝试改变

view_paths = new_paths

self.view_paths = new_paths

view_paths = new_paths 很可能是在初始化一个名为 view_paths 的局部变量,而不是调用方法 view_paths=

编辑:

因为你得到一个 NoMethodError 你不在你认为你所在的上下文中,因为在你发布的文件中有一个具有该名称的方法 https://github.com/rails/rails/blob/ec28c4fb242a9bf0632bb4dac0d0a2d949eab1b3/actionpack/lib/abstract_controller/view_paths.rb#L91

看起来一旦创建了控制器实例,就会从 lookup_context 访问视图路径,这就是需要更改的地方。

 lookup_context.view_paths.paths.reject! { |vp| rejection criteria }