2016-08-16 3 views
3

Given Rails 4.2, Ruby 2.3.1.Railsビューのパスがリセットされない

理論上、Railsはビューパスを完全にリセットする必要があります(here, in the source code参照)。

ただし、コントローラのコールバックから経由で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_pathssimply being a wrapper for self._view_pathsにもかかわらず、それらの変更をピックアップしていません。 self._view_pathsが正しく、#view_pathsが正しくないのはなぜですか?

注:Railsはself._view_pathsではなく、ビューを検索するときに#view_pathsを使用するため、これは重要です。

答えて

0

投稿をファイルにその名前のメソッドがあるので、コントローラのインスタンスが作成されると、ビューのパスがlookup_contextからアクセスされたように見えであると思いコンテキストではありませんNoMethodErrorそれが変更される必要がある場所です。

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

self.view_paths = new_paths 

view_paths = new_paths

view_paths = new_paths 

を変更してみてください可能性が最も高いview_pathsというローカル変数を初期化する代わりにする方法view_paths=

編集呼んでいる:あなたがしているので

を取得するティンあなたは、あなたがhttps://github.com/rails/rails/blob/ec28c4fb242a9bf0632bb4dac0d0a2d949eab1b3/actionpack/lib/abstract_controller/view_paths.rb#L91

+0

'self.view_paths = new_paths'は' NoMethodErrorスロー:その名前のメソッドがあるので、あなたがしていると思うコンテキストではないことを教えなければならないこと次に ' – steel

+1

未定義のメソッド「view_pathsを=」あなたが投稿したファイルのhttps://github.com/rails/rails/blob/ec28c4fb242a9bf0632bb4dac0d0a2d949eab1b3/actionpack/lib/abstract_controller/view_paths.rb#L91 – kcdragon

+0

コンテキストでの呼び出しが良好です。あなたの答えを更新する場合、私はupvoteに私の変更することができます。 (だから私の投票を変更私をロックされて) – steel

関連する問題