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
合并
我需要以编程方式从 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
合并