1

私は困惑している。これが私の状況です。最近、現在作業中のアプリケーションを3つのRailsエンジンに分割しました。エンジンの1つは、ユーザー管理を実行しています。そのためにdeviseを使用しています。デフォルトでは、デバイスは(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'からはほど遠いです。また、デフォルトのDeviseの動作を使用できなくなります。これは私にとって便利なものです。しかし、最も重要なのは、何が起こっているのか本当に理解できないということです。

4

1 に答える 1

0
Rails.application.routes.draw do

の代わりに使用する必要があります

BackOffice::Engine.routes.draw do

エンジンでは、エンジンルートにある一致は、アプリケーション全体ではなく、エンジンの名前空間にのみ存在します。

于 2012-08-23T15:01:32.803 に答える