如何将 Rails 引擎的路线移动到 rails 主要路线?
How to move Rails Engine's route to rails main routes?
我正在使用 Rails 4.2 和 Rails 引擎来处理我的管理面板。我想将引擎代码移动到主 rails 应用程序,其中一部分是移动路线。
现在,我在引擎 my-web-app/lib/admin/config/routes.rb
中的路线是这样的:
Admin::Engine.routes.draw do
resources :countries, only: [:index]
end
在我的应用程序的路线 config/routes.rb
:
Rails.application.routes.draw do
.. some routes ...
mount GlobalAdmin::Engine => "/admin"
end
现在引擎的国家路线是 countries_url
NOT admin_countries_url
但对于 URL 你需要用类似的东西访问它admin/countries
(这是引擎的默认行为,我想保持这种方式)。
我所做的是将 my-web-app/lib/admin/config/routes.rb
移动到 my-web-app//config/routes.admin.rb
并使其看起来像:
Rails.application.routes.draw do
resources :countries, only: [:index]
end
然后在我的 config/application.rb
中添加了如下内容:
config.paths["config/routes.rb"] = [
Rails.root.join("config/routes.admin.rb"),
Rails.root.join("config/routes.rb")
]
这种方法的问题是我有 countries_url
,但是,我无法像 admin/countries
那样使用管理命名空间 URL 访问它。如果我添加命名空间 admin
类似:
Rails.application.routes.draw do
namespace :admin do
resources :countries, only: [:index]
end
end
然后我需要用 admin_countries_url
引用国家 url,这不是我需要的行为。
如何在不影响以前的引擎路线的情况下从引擎中移动路线的任何帮助?
我知道默认情况下,引擎内部的路由与应用程序是隔离的。应用程序及其引擎可以具有相同名称的路由,因此将两者集成可能会导致一些问题,但是我想尽可能保留确切的路由,而不是添加名称空间并坚持使用确切的路由名称。
使用scope
代替namespace
:
Rails.application.routes.draw do
scope path: "/admin" do
resources :countries
end
end
max@MaxBook ~/p/sandbox> rails routes
Prefix Verb URI Pattern Controller#Action
countries GET /admin/countries(.:format) countries#index
POST /admin/countries(.:format) countries#create
new_country GET /admin/countries/new(.:format) countries#new
edit_country GET /admin/countries/:id/edit(.:format) countries#edit
country GET /admin/countries/:id(.:format) countries#show
PATCH /admin/countries/:id(.:format) countries#update
PUT /admin/countries/:id(.:format) countries#update
DELETE /admin/countries/:id(.:format) countries#destroy
我正在使用 Rails 4.2 和 Rails 引擎来处理我的管理面板。我想将引擎代码移动到主 rails 应用程序,其中一部分是移动路线。
现在,我在引擎 my-web-app/lib/admin/config/routes.rb
中的路线是这样的:
Admin::Engine.routes.draw do
resources :countries, only: [:index]
end
在我的应用程序的路线 config/routes.rb
:
Rails.application.routes.draw do
.. some routes ...
mount GlobalAdmin::Engine => "/admin"
end
现在引擎的国家路线是 countries_url
NOT admin_countries_url
但对于 URL 你需要用类似的东西访问它admin/countries
(这是引擎的默认行为,我想保持这种方式)。
我所做的是将 my-web-app/lib/admin/config/routes.rb
移动到 my-web-app//config/routes.admin.rb
并使其看起来像:
Rails.application.routes.draw do
resources :countries, only: [:index]
end
然后在我的 config/application.rb
中添加了如下内容:
config.paths["config/routes.rb"] = [
Rails.root.join("config/routes.admin.rb"),
Rails.root.join("config/routes.rb")
]
这种方法的问题是我有 countries_url
,但是,我无法像 admin/countries
那样使用管理命名空间 URL 访问它。如果我添加命名空间 admin
类似:
Rails.application.routes.draw do
namespace :admin do
resources :countries, only: [:index]
end
end
然后我需要用 admin_countries_url
引用国家 url,这不是我需要的行为。
如何在不影响以前的引擎路线的情况下从引擎中移动路线的任何帮助?
我知道默认情况下,引擎内部的路由与应用程序是隔离的。应用程序及其引擎可以具有相同名称的路由,因此将两者集成可能会导致一些问题,但是我想尽可能保留确切的路由,而不是添加名称空间并坚持使用确切的路由名称。
使用scope
代替namespace
:
Rails.application.routes.draw do
scope path: "/admin" do
resources :countries
end
end
max@MaxBook ~/p/sandbox> rails routes
Prefix Verb URI Pattern Controller#Action
countries GET /admin/countries(.:format) countries#index
POST /admin/countries(.:format) countries#create
new_country GET /admin/countries/new(.:format) countries#new
edit_country GET /admin/countries/:id/edit(.:format) countries#edit
country GET /admin/countries/:id(.:format) countries#show
PATCH /admin/countries/:id(.:format) countries#update
PUT /admin/countries/:id(.:format) countries#update
DELETE /admin/countries/:id(.:format) countries#destroy