动态添加路由到rails路由的开头

时间:2016-04-02 17:55:00

标签: ruby-on-rails

对于我正在研究的测试助手,我需要在路径的开头中注入一条路径。最后添加它很容易:

  test_routes = Proc.new do
    get "/#{route_root}/:id", to: "#{route_root}#test"
  end
  Rails.application.routes.eval_block(test_routes)

问题在于,通常会有"赶上所有"应用程序路由列表末尾的路由,因此我需要将其作为FIRST路由注入。

我一直在使用这种技术:How to dynamically add routes in Rails 3.2

但它的hacky,并且在昨晚的宝石更新后它破了(不知道为什么,但它在routes.clear!内部破坏)所以我正在寻找一个不太讨厌的解决方案。

1 个答案:

答案 0 :(得分:0)

为什么不像这样创建自己的模块:

 module DynamicRouter
    def self.routes router
        router.get "/#{route_root}/:id", to: "#{route_root}#test"
    end
 end

并在您的routes.rb中调用您的函数:

 # in routes.rb
 # first line
 DynamicRouter::routes(self)

这就是我们如何处理一些自定义宝石。你也可以修补路由器,但它更黑。