我使用Rails 4.2和Rails Engine来处理我的管理面板。我想将引擎代码移动到主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
不 admin_countries_url
但对于网址,您需要使用类似{{1}的内容访问该网址(这是引擎的默认行为,我想保持这种方式)。
我所做的是将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
,如:
admin
然后,我需要使用Rails.application.routes.draw do
namespace :admin do
resources :countries, only: [:index]
end
end
来引用国家网址,这不是我需要的行为。
如何在不影响之前引擎路线的情况下从引擎移动路线的任何帮助?
我知道默认情况下,引擎内的路由与应用程序隔离。应用程序及其引擎可以具有相同名称的路由,因此集成两者可能会导致一些问题,但是我希望尽可能保留确切的路由,而不是添加命名空间并坚持使用确切的路由名称。
答案 0 :(得分:1)
使用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