3

给定 Rails 4.2,Ruby 2.3.1。

理论上,Rails 应该允许您完全重置视图路径,如此处所示,在源代码中。

但是,当我通过控制器回调重置 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尚未获取这些更改,尽管只是self._view_paths. 为什么是self._view_paths正确的,而#view_paths不是?

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

4

2 回答 2

0

尝试改变

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

于 2016-08-16T03:08:15.767 回答
0

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

 lookup_context.view_paths.paths.reject! { |vp| rejection criteria }
于 2016-08-16T15:01:47.923 回答