如何在铁路路线中捕获请求



我需要在路由中有条件地设置param选项。

没有条件很容易:

resources :foo, param: :uuid do
  #...
end

我理想地想要的是以下几行(显然不起作用(:

resources :foo, param: ->(req) { req.env['PATH_INFO'].match?(/bar/) ? :uuid : :id } do
  #...
end

您可以编写一个改变参数的中间件:

class ParamTransformer
  def initialize(app)
    @app = app
  end
  def call(env)
    if env['PATH_INFO'].match?(/bar/)
      env.request.update_param('slug', env.request.params['id'])
    end
    @app.call(env)
  end
end
# config/application.rb
config.middleware.use 'ParamTransformer'

如果您真的想在路线上有条件地进行操作,则可以创建一个约束:

class ParamTransformerConstraint
  def matches?(request)
    if env['PATH_INFO'].match?(/bar/)
      request.update_param('slug', request.params['id'])
    end
    true # lets everyone through
  end
end

感觉真的很骇人。

相关内容

  • 没有找到相关文章

最新更新