Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何显式设置rails引擎路由代理?_Ruby On Rails - Fatal编程技术网

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

Ruby on rails 如何显式设置rails引擎路由代理?,ruby-on-rails,Ruby On Rails,在我的Rails 5.0.7应用程序中,我将threded(0.15.4)作为引擎安装在名称空间中 #routes.rb namespace :home do mount Thredded::Engine => "/communities", as: "thredded" end 这允许我访问/home/communities以打开threded界面 不幸的是,这也会导致意外行为。rails路由代理未按预期设置为threded,而是设置为home\u threded。如果我想访问引

在我的Rails 5.0.7应用程序中,我将threded(0.15.4)作为引擎安装在名称空间中

#routes.rb

namespace :home do
  mount Thredded::Engine => "/communities", as: "thredded"
end
这允许我访问/home/communities以打开threded界面

不幸的是,这也会导致意外行为。rails路由代理未按预期设置为
threded
,而是设置为
home\u threded
。如果我想访问引擎中的命名路由,我需要执行
home\u threded.root\u path
而不是
threded.root\u path

这尤其麻烦,因为threded.root\u路径实际上是在threded gem本身的代码中引用的,它现在抛出了一个错误

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

我考虑并拒绝了以下几点:

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

  • 我还可以编写一个装饰程序来覆盖有问题的方法,以便它使用正确的rails路由代理,但这仍然意味着我必须在任何地方使用
    home\u threded.some\u path
    而不是预期的
    threded.some\u path

  • 我无法命名引擎的名称空间。这可能会起作用,但会打破应用程序其余部分的命名约定

  • 您是否尝试过:

    scope :home do
      mount Thredded::Engine => "/communities", as: "thredded"
    end
    
    这会将
    /home
    添加到您的URI模式中,但保持您的
    控制器#操作
    前缀
    不变。

    您尝试过:

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

    这应该将
    /home
    添加到您的URI模式中,但保持您的
    控制器#操作
    前缀
    不变。

    啊,这很有效。名称空间用于其他资源,但看起来rails可以处理与名称空间相同的作用域。啊,这很有效。名称空间用于其他资源,但看起来rails可以处理与名称空间相同的范围。