【发布时间】:2017-10-08 22:40:59
【问题描述】:
我正在使用带有 Rails Engine 的 Rails 4.2 来处理我的管理面板。我想将引擎代码移动到主 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 引用国家/地区网址,这不是我需要的行为。
关于如何在不影响先前引擎路线的情况下从引擎中移动路线的任何帮助?
我知道默认情况下引擎内部的路由与应用程序是隔离的。应用程序及其引擎可以具有相同名称的路由,因此将两者集成可能会导致一些问题,但是我想尽可能保留确切的路由,而不是添加命名空间并坚持使用确切的路由名称。
【问题讨论】:
-
能否请您明确说明期望的结果是什么?
-
当然,感谢您愿意帮助@max。因此,使用我的引擎时,我有
countries_url路径名。现在通过重构和从引擎移动路径,我仍然想要countries_url路径。然而,就像我之前的实现一样,我希望 URL 看起来像admin/countries。 -
如果您的引擎路线类似于:
Admin::Engine.routes.draw do; resources :countries, only: [:index];end,并且它的安装方式类似于:Rails.application.routes.draw do; mount GlobalAdmin::Engine => "/admin"; end。然后我们将得到countries_url路径,并且可以通过/admin/countries访问URL,我想要完全相同的行为。
标签: ruby-on-rails ruby-on-rails-4 routes rails-routing rails-engines