我们有一个应用程序,我们外包了一个名为Arcop
的引擎/宝石。该引擎为客户创建调查,并有一个邮件程序,用于发送带有调查链接的电子邮件。如果客户端登录到应用程序,则链接正常工作。但是,如果用户未登录,则应用程序应重定向到应用程序sessions#new
。似乎正在发生的事情是Rails试图在引擎中找到路由而不是应用程序。
当我点击电子邮件链接转到引擎生成的调查(/ localhost: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
所以我不知道从哪里开始......
答案 0 :(得分: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