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