Rails 路由:以编程方式从 URL 中提取参数

Rails Routes: Programmatically extract params from a URL

我需要以编程方式从 URL 中提取参数,即如果调用 URL 控制器将收到的散列。这不是在控制器内部发生的,它是用于内省工具的,因此控制器永远不会运行。我想预测如果控制器运行会发生什么,希望使用相同的 API Rails 本身正在使用。

例如,给定 Rails 路由 /blogs/:id 和 URL 查询 /blogs/123?published=true,我想提取 { id: 123, published: true }.

使用 Rails.application.routes.recognize_path,我可以获得此示例中的 id,因为它是路由模式的一部分,但不是额外的 CGI 参数 (published)。我可以手动添加这些,但我想知道是否有合适的 API。

params 哈希包含所有路由参数,包括查询参数。

# Given /blogs/123?published=true
def action
  params[:id] # => 123
  params[:published] # => "true"
end

您可以解析 URL,读取查询字符串并将它们转换为散列。

u = URI.parse("http://localhost:3000/blogs/213?published=true")
cgi_params = u.query.split('&').map { |e| e.split('=') }.to_h

将它们与您使用 Rails.application.routes.recognize_path

获得的 params 合并