我创建了一个带有新闻模块的简单应用程序,并将新闻定义为一个单独的可安装引擎(它也将用于其他项目)。我需要能够将引擎的管理员和用户部分作为单独的路由安装在父应用程序上。现在我可以将整个引擎安装为
Rails.application.routes.draw do
mount Jnews::Engine => "/news"
end
但我想将父应用程序上的管理员和用户路由分开,就像/news
用户和/admin/news
管理员一样。这可能吗?
我创建了一个带有新闻模块的简单应用程序,并将新闻定义为一个单独的可安装引擎(它也将用于其他项目)。我需要能够将引擎的管理员和用户部分作为单独的路由安装在父应用程序上。现在我可以将整个引擎安装为
Rails.application.routes.draw do
mount Jnews::Engine => "/news"
end
但我想将父应用程序上的管理员和用户路由分开,就像/news
用户和/admin/news
管理员一样。这可能吗?
我认为这取决于你为什么要这样做:
如果您想将用户和管理员作为单独的代码保留在新闻 gem 中 - 那么您可能想要隔离 2 个命名空间,然后安装每个命名空间 - 这可能涉及将它们本身作为单独的引擎。
如果您想要的是(这就是我认为您的意思?)是在新闻引擎中共享代码,但根据用户是普通用户还是管理员在主应用程序中的 2 个不同的 url 上访问?在这种情况下我会做的是这样的:
在主应用程序中
Rails.application.routes.draw do
mount Jnews::Engine => "/app"
end
在引擎路线中
Jnews::Engine.routes.draw do
match "/news", :to => "some_controller#some_action"
match "/admin/news", :to => "some_controller#some_action"
end
然后在主应用程序中,根据用户是什么(用户或管理员),您可以重定向到app/news
或app/admin/news
我希望这会有所帮助,我不太确定是否进行条件路由。
但是,这里有一个非常好的路由指南:http: //guides.rubyonrails.org/routing.html
您也许可以尝试安装具有动态路由的引擎?
mount Jnews::Engine => ":user_id/news"
您最终将 Jnew::Engine 路由到哪里user/news
和admin/news
?我从来没有真正这样做过,所以我不知道这是否可能,但是......也许?
让我知道这是否有帮助:) 干杯