2016-10-31 6 views
18

私のコントローラでレールパスのgemを使用したいと思います。Rails 4 + append_view_path

私は

module MyGem 
    class FooController < Config.controller 
    before_action ->{ append_view_path "app/views/my_gem/#{wizard_name}" } 
... 

に追加したとビューで、私は

app/views/my_gem/#{wizard_name}/my_gem/foo/some.erb 

のようなパスを指定する必要は宝石の名前空間の相対パスをカットし、ルックアップを得るために、Railsの中でいくつかの方法でありますパスは?

app/views/my_gem/#{wizard_name}/some.erb 
# or 
foo/bar/some.erb 

ありがとうございます!

UPD:

それが最良かつ唯一の選択肢ではないことを、私はEngineisolate_namespaceを無効にするとの方法があることを、理解し、私は信じています。

UPD2:Rails4については、このアイデアは、あなたが、あなたのどのように任意のファイルを読み込む方法をレンダリングしますERBを解釈し、例えばHTMLページとしてそれをレンダリングすることができhttps://coderwall.com/p/p_yelg/render-view-outside-of-a-controller-in-rails-4

+3

私はあなたが望むものを正確に理解することができません。あなたはあなたの意見の例を教えてください。 –

+0

このコンテンツではコンテンツの表示に問題はありませんが、質問はビューの検索パスについてのみです。 –

+0

'view_paths'はどのように見えますか、' isolate_namespace'を使った後の様子はどうですか? –

答えて

0

非常に有用でした。 bindingを渡すことによって

ERB.new(File.read(Rails.root.join('foo', bar', 'some.erb'))).result(binding) 

、テンプレートは現在のコンテキスト内のすべての変数にアクセスする必要があります。

詳細は

参照ERBのドキュメント:あなたの宝石を想定しhttp://apidock.com/ruby/ERB

0

はエンジンである、あなたは単にエンジンでrender :someを呼び出すことができるはずです。アプリに<gem_name>/<controller_name>/some.html.erbという名前のビューがある場合、それが使用されます。

また、アプリがまだ提供していない場合に使用される、そのビューのバージョンをあなたの宝石に提供することができます。

wizard_nameも参照する必要がある場合は、ビューパスのその部分をレンダリングの呼び出し先に移動するのが最善の方法だと思います。

あなたの宝石のコントローラーでは、render "#{wizard_name}/some"と書いてあります。それは、私たちのアプリのapp/views/<gem_name>/<controller_name>/<wizard_name>/some.html.erbとあなたの宝石のapp/views/<controller_name>/<wizard_name>/some.html.erbの両方でそのビューを探します。