不要为路由添加Rails引擎名称前缀

And*_*zub 5 ruby ruby-on-rails rails-engines ruby-on-rails-3

我正在转换一个应用程序以使用Rails引擎。我的engines/web文件夹中有一个引擎。在config/routes.rb我这样安装它:

mount Web::Engine => '/', as: 'web_engine'

文件夹结构如下:

config
  routes.rb
engines
  web
    config
      routes.rb
    app
      controllers
        web 
          application_controller.rb
          ...
    lib
      ...
Run Code Online (Sandbox Code Playgroud)

引擎的定义如下:

module Web
  class Engine < Rails::Engine
    isolate_namespace Web
  end
end
Run Code Online (Sandbox Code Playgroud)

我在Web引擎内部的应用程序控制器的定义如下:

module Web
  class ApplicationController < ::ActionController::Base
    layout 'web/layouts/application'

    # other code
  end
end
Run Code Online (Sandbox Code Playgroud)

问题在于Web::ApplicationController我内部必须将路由称为web_engine.my_route_path而不是my_route_path。是否可以web_engine从Web引擎内部访问不带前缀的路由?

Nik*_*kov 0

这应该可以解决问题:

module Web
  class Engine < Rails::Engine
    isolate_namespace Web
  end
end
Run Code Online (Sandbox Code Playgroud)

有关路线的详细信息,请参阅文档。另请查看Engine.isolate_namespace说明。