2012-05-23 1 views
9

私はEngraveというRailsエンジンを構築しています。レールのエンジンのビューの中に道路ヘルパーがありません

私はエンジンがそうのようにマウントされています:

# Routes.rb of the host app 
mount Engrave::Engine => "/engrave", :as => "engrave_engine" 

をこのエンジンの中で、私は「PostsControllerの」と呼ばれるコントローラを持っています。私はそうのようなポスト表示するには、このコントローラに移動したときに:/engrave/posts/1を私はこのエラーを取得する:

undefined local variable or method `new_user_session_path' 

エンジンにおけるPostsControllerのそうような、アプリケーションコントローラから継承されたエンジン制御装置、から継承している。

devise_for :users 

new_user_session_pathへの呼び出し:私のようなセットアップを持っている

module Engrave 
    class PostsController < ApplicationController 
    ... 
end 

class Engrave::ApplicationController < ApplicationController 
end 

new_user_session_pathが工夫によって定義されています、 layouts/application.html.erbテンプレートファイルホストアプリケーション

このルートヘルパーがこのコンテキストで利用できない理由を理解できません。私は間違って何をしていますか?

+0

技術的に問題を修正しているので、StrangeDaysの答えは正しいとマークしましたが、すべてのレイアウトテンプレートを変更しなくてもこの方法でエンジンを使用する方法が分かっていれば素晴らしいでしょう。私は周りに遊んで、私は孤立した/マウント可能なものの代わりに完全なエンジンを作成することによって、私が望むことを達成するために管理しました。私はまだ何かが欠けていると思う、私は私のケーキを持って、この1つでそれを食べたい。 – Jeff

答えて

9

使用

私は、メインアプリのapplication_helper.rbに次のようにやって成功を収めてきた

6

を動作するはずmain_app.new_user_session_path

module ApplicationHelper 
    # Can search for named routes directly in the main app, omitting 
    # the "main_app." prefix 
    def method_missing method, *args, &block 
    if main_app_url_helper?(method) 
     main_app.send(method, *args) 
    else 
     super 
    end 
    end 

    def respond_to?(method) 
    main_app_url_helper?(method) or super 
    end 

private 

    def main_app_url_helper?(method) 
    (method.to_s.end_with?('_path') or method.to_s.end_with?('_url')) and 
     main_app.respond_to?(method) 
    end 
end 

私が使用しましたこれはマウント可能なエンジンのため、これらの機能を犠牲にする必要はありません。

0

this responseの作業で、application_helpers.rbで見つかったすべてのヘルパーをコントローラー内に含めます(コントローラー内に 'manager'がある場合は 'manager'がマウント可能なエンジンの現在の名前空間です)。標準アプリケーション)。

関連する問題