在我的Rails 5.0.7应用程序中,我将Threded(0.15.4(作为引擎安装在命名空间中。
#routes.rb
namespace :home do
mount Thredded::Engine => "/communities", as: "thredded"
end
这使我可以访问/home/community来调出threadded接口。
不幸的是,这也会导致意想不到的行为。rails路由代理不是预期的thredded
,而是home_thredded
。如果我想访问引擎中的命名路由,我需要执行home_thredded.root_path
而不是thredded.root_path
这尤其麻烦,因为thredded.root_path
实际上是在threadded gem本身的代码中引用的,现在它会抛出一个错误。
是否有某种方法可以显式设置路由代理,以避免在路由代理中包含命名空间?
我考虑过并拒绝的几件事:
我可以直接编辑gem的违规文件中的代码,但维护起来会很麻烦。
我也可以编写一个装饰器来覆盖有问题的方法,以便它使用正确的rails路由代理,但这仍然意味着我必须在任何地方使用
home_thredded.some_path
,而不是预期的thredded.some_path
我无法命名引擎的名称。这是可行的,但会破坏应用程序其他部分的命名约定。
您尝试过吗:
scope :home do
mount Thredded::Engine => "/communities", as: "thredded"
end
这应该将/home
添加到URI模式中,但保持Controller#Action
和Prefix
不变。