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 }
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 }