如何显式设置rails引擎路由代理



在我的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本身的代码中引用的,现在它会抛出一个错误。

是否有某种方法可以显式设置路由代理,以避免在路由代理中包含命名空间?

我考虑过并拒绝的几件事:

  1. 我可以直接编辑gem的违规文件中的代码,但维护起来会很麻烦。

  2. 我也可以编写一个装饰器来覆盖有问题的方法,以便它使用正确的rails路由代理,但这仍然意味着我必须在任何地方使用home_thredded.some_path,而不是预期的thredded.some_path

  3. 我无法命名引擎的名称。这是可行的,但会破坏应用程序其他部分的命名约定。

您尝试过吗:

scope :home do
mount Thredded::Engine => "/communities", as: "thredded"
end

这应该将/home添加到URI模式中,但保持Controller#ActionPrefix不变。

最新更新