2016-03-06 77 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