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

时间:2018-08-03 21:55:10

标签: ruby-on-rails

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

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

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

  1. 我可以直接在gem的有问题的文件中编辑代码,但是维护起来很烦人。

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

  3. 我无法为引擎命名空间。这可能有效,但会破坏应用程序其余部分的命名约定。

1 个答案:

答案 0 :(得分:2)

您是否尝试过:

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

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