Railsエンジンのビュー/レイアウトをオーバーライドするときにメインアプリヘルパーにアクセスする質問する

Railsエンジンのビュー/レイアウトをオーバーライドするときにメインアプリヘルパーにアクセスする質問する

アプリケーションに一般的な機能 (フォト ギャラリー) を提供するためのシンプルな Rails エンジンを作成しました。ギャラリーのメニューがメイン アプリケーションのメニューと一致するように、標準の _header 部分をオーバーライドできるようにしたいと考えています。ヘッダー ビューで、application_helpers (メイン アプリ) の一部であるヘルパーを呼び出しますが、"未定義のメソッド" エラーが繰り返し発生します。エンジンのアプリケーション レイアウトまたはその部分をオーバーライドすると、メイン アプリの application_helpers が (明らかに) 含まれていないことがわかります。

そこで質問なのですが、メイン アプリケーションでエンジン ビューをオーバーライドし、メイン アプリケーション ヘルパー メソッドにアクセスするにはどうすればよいでしょうか。エンジン機能を台無しにしないためにも、エンジン ヘルパーにアクセスする必要があります。

コントローラーもオーバーライドする必要がありますか? ヘルパ​​ーを取得するためだけに、多くの作業が必要のようです。

ありがとう

レール3.1.3

ベストアンサー1

こちらのブログ投稿をご覧ください:http://www.candland.net/2012/04/17/rails-routes-used-in-an-isolated-engine/作成者は、親アプリケーションのヘルパーにアクセスするために、アプリケーション ヘルパーに method_missing 定義を追加します。

/config/initializers/blogit.rb

module Blogit
    module ApplicationHelper
      def method_missing method, *args, &block
        puts "LOOKING FOR ROUTES #{method}"
        if method.to_s.end_with?('_path') or method.to_s.end_with?('_url')
          if main_app.respond_to?(method)
            main_app.send(method, *args)
          else
            super
          end
        else
          super
        end
      end

      def respond_to?(method)
        if method.to_s.end_with?('_path') or method.to_s.end_with?('_url')
          if main_app.respond_to?(method)
            true
          else
            super
          end
        else
          super
        end
      end
    end
  end

おすすめ記事