Ruby on rails 在Rails';routes.rb

Ruby on rails 在Rails';routes.rb,ruby-on-rails,url-routing,Ruby On Rails,Url Routing,根据请求URL是否有尾随斜杠,是否有方法在Rails的routes.rb中执行不同的路由?这似乎很困难,因为请求对象的尾部斜杠已被删除,这意味着GET of的request.url值为。这种行为会阻止匹配使用以及 我发现的一个解决方案是使用request.env[“request_URI”],它包含随请求一起提交的原始URL。不幸的是,由于它不是请求的直接字符串属性,因此需要: 这似乎有些过分,所以希望有人有一个更优雅的方法。我找到的一个解决方案是使用request.env[“request\u

根据请求URL是否有尾随斜杠,是否有方法在Rails的routes.rb中执行不同的路由?这似乎很困难,因为请求对象的尾部斜杠已被删除,这意味着GET of的request.url值为。这种行为会阻止匹配使用以及

我发现的一个解决方案是使用request.env[“request_URI”],它包含随请求一起提交的原始URL。不幸的是,由于它不是请求的直接字符串属性,因此需要:


这似乎有些过分,所以希望有人有一个更优雅的方法。

我找到的一个解决方案是使用request.env[“request\u URI”],它包含随请求提交的原始URL。不幸的是,由于它不是请求的直接字符串属性,因此需要:

这似乎有点过头了,所以希望有人有一个更优雅的方法

class TrailingSlashMatcher
  def matches?(request)
    uri = request.env["REQUEST_URI"]
    !!uri && uri.end_with?("/")
  end
end

AppName::Application.routes.draw do
  match '/example/*path', constraints: TrailingSlashMatcher.new, to: redirect("/somewhere/")
end