Rails引擎覆盖了应用程序的路径

时间:2016-03-06 17:17:21

标签: ruby-on-rails ruby-on-rails-4 rails-engines

我们有一个应用程序,我们外包了一个名为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

所以我不知道从哪里开始......

1 个答案:

答案 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