7

一方で、私はマウント可能なエンジンを持っています。たとえば、Front Front にはアセットといくつかのページが含まれているとします。MainApp から分離されています。メインアプリに触れたくない。

一方、レイアウトとフロントの部分を使用して MainApp が必要です。だから私はこのようにレイアウトをセットアップします:

class ApplicationController < ActionController::Base
    layout 'front/application'
end

ただし、フロント/アプリケーションは、このように分離されているため、エンジンのパーシャルを直接参照します

render 'header' # front/ prefix is not required

そのため、MainApp ビューは app/views/front/application/header ではなく app/views/application/header を読み込もうとします。

これを修正するには、次のように prepend_view_path を配置します。

class ApplicationController < ActionController::Base
    layout 'front/application'
    before_filter :prepend_front
protected
    def prepend_front
       prepend_view_path "app/views/front"
    end
end

しかし、エンジン パスがベンダーを指しているため、これは機能しません。エンジンはこれをプリペンド パス リストに追加します: ~/main_app/vendor/private_gems/front-0.0.2/app/views そして、私の prepred_front メソッドはこれを作成します: ~/main_app/app/views/front

私は強制的に正しいパスを追加しようとしました(しかし、それはとても汚いように見えます):

prepend_view_path "#{Rails.root}/vendor/private_gems/front-0.0.2/app/views/front"

機能しません。アプリをクラッシュさせるだけです...

そして、私はここで立ち往生しています。私の設計が間違っているのではないでしょうか?

4

3 に答える 3

0

最後に、分離プロパティを削除します。ビューを1つ上のフォルダーに移動したので、engine_appフォルダーから移動しました。

最後の調整は、EngineApp::Engine.url_helperをMainAppアプリケーションコントローラーに含めることだけでした。

プリペンドスタックは次のようになります。

  • メインアプリの先頭に追加されたパス
  • メインアプリビュー
  • エンジンビュー

つまり、エンジンに基づいており、メインのアプリを上部に追加します。

于 2012-03-20T11:45:53.210 に答える