2016-03-06 42 views
1

我們有一個應用程序,我們將一個名爲Arcop的引擎/寶石外包。該引擎爲客戶創建調查並具有一個郵件發送器,該郵件發送帶有調查鏈接的電子郵件。如果客戶端登錄到應用程序,則鏈接正常工作。但是,如果用戶未登錄,應用程序應重定向到應用程序的sessions#new。似乎正在發生的事情是,Rails正試圖在引擎中找到路線,而不是應用程序。Rails引擎覆蓋應用程序的路線

,當我的電子郵件點擊鏈接進入發動機產生的調查,我發現了錯誤(/本地主機:3001/arcop/survey_responses/30):

No route matches {:action=>"new", :controller=>"sessions", :id=>"30"} 

應用程序的application_controller.rb

before_action :redirect_if_site_is_private 

def redirect_if_site_is_private 
    ... 
    respond_to do |format| 
    format.html do 
     save_location 
     redirect_to login_path 
    end 
end 

登錄路徑被定義爲:

get 'sign-in' => 'sessions#new', as: :login 

我通過閱讀Getting Started with Engines Rails Guide和發動機都是從ApplicationController繼承正確:

class Arcop::ApplicationController < ::ApplicationController 

所以我不知道在哪裏何去何從......

回答

1

的解決方案是重寫方法redirect_if_site_is_private發動機的application_controller內.rb與限定符main_app

def redirect_if_site_is_private 
    ... 
    respond_to do |format| 
    format.html do 
     save_location 
     redirect_to main_app.login_path 
    end 
    end 
end