1

我很混乱。这是我的情况。最近,我将当前正在开发的应用程序拆分为三个 Rails 引擎。其中一个引擎是进行用户管理。我正在为此使用设计。默认情况下,设备使用名为(user_route)的路由在用户登录后重定向用户,因此我在引擎的 routes.rb 文件中定义了它。

所以,长话短说:

在主应用程序的 routes.rb 中,我有:

mount BackOffice::Engine,    at: '/bo'

比在 BO 引擎的 routes.rb 中我有:

match 'user/logged_in' => 'users#logged_in',       as: 'user_root'

引擎中的整个 routes.rb 是:

BackOffice::Engine.routes.draw do
  devise_for :admins, {
    class_name: 'BackOffice::Admin',
    module: :devise,
  }

  devise_for :users, {
    class_name: 'BackOffice::User',
    module: :devise,
  }

  resources :admins
  resources :users
  resources :life_promotions

  match ''               => 'life_quotations#index', as: 'life_quotations'
  match 'user/logged_in' => 'users#logged_in',       as: 'user_root'

  root to: 'life_quotations#index'
end

而且,如果我这样做:

module BackOffice
  class ApplicationController < ActionController::Base
    before_filter lambda { raise user_root_path }
  end
end

我看到以下结果:

/assets?action=logged_in&controller=back_office%2Fusers

这与'user/logged_in'相去甚远。而且它还阻止我使用对我来说很方便的默认设计行为。但最重要的是,我真的无法弄清楚发生了什么。

4

1 回答 1

0
Rails.application.routes.draw do

需要使用而不是

BackOffice::Engine.routes.draw do

在您的引擎中,导致您在引擎路由中的匹配只存在于引擎的命名空间中,而不是整个应用程序中。

于 2012-08-23T15:01:32.803 回答