アプリケーションに一般的な機能 (フォト ギャラリー) を提供するためのシンプルな 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